Awk
AWK 一個班輪將三個欄位合併到一個文件中
我有一個包含兩種類型欄位分隔符的記錄(行)的文件,
|
如下!
所示:Name|Age|Physics|Chemistry|Maths|English|Batch!Year!AdmisnNo!Grade!Score Student1|81|65|70|80|88|EWS!2021!1001!A!75 Student2|72|63|60|50|75|EWS!2021!1002!A!85 Student3|72|63|60|50|75|EWS!2021!1002!A!85
如何合併
Batch
,Year
和AdmisnNo
欄位如下?請注意,為簡潔起見,我展示了一個有用欄位的小列表,因為我的真實文件有許多這樣的相關欄位。我要刪除兩個或三個
!
標記的這個欄位不是最後一個,可以是大約 49 個欄位總數中的任何欄位(6 或 7)。Name|Age|Physics|Chemistry|Maths|English|BatchYearAdmisnNo!Grade!Score Student1|81|65|70|80|88|EWS20211001!A!75 Student2|72|63|60|50|75|EWS20211002!A!85 Student3|72|63|60|50|75|EWS20211002!A!85
我要求
awk
,但是歡迎任何合理的標準命令。
$ awk -F '|' 'BEGIN { OFS = FS } { sub("!", "", $NF); sub("!", "", $NF) }; 1' file Name|Age|Physics|Chemistry|Maths|English|BatchYearAdmisnNo!Grade!Score Student1|81|65|70|80|88|EWS20211001!A!75 Student2|72|63|60|50|75|EWS20211002!A!85 Student3|72|63|60|50|75|EWS20211002!A!85
這用於從輸入的最後一個分隔欄位中
awk
刪除前兩個字元。!``|
NF
在程式碼中使用任意數字代替awk
最後一個欄位來影響其他欄位。假設只有最後一個欄位包含
!
字元,使用sed
:$ sed -e 's/!//' -e 's///' file Name|Age|Physics|Chemistry|Maths|English|BatchYearAdmisnNo!Grade!Score Student1|81|65|70|80|88|EWS20211001!A!75 Student2|72|63|60|50|75|EWS20211002!A!85 Student3|72|63|60|50|75|EWS20211002!A!85
這將刪除
!
每行的第一個。然後它第二次執行完全相同的替換,!
也刪除了第二次。反轉每一行並連續兩次刪除第三
!
行,然後再次反轉結果行。這允許其他|
以 - 分隔的欄位也包含!
字元。$ rev file | sed -e 's/!//3' -e 's///3' | rev Name|Age|Physics|Chemistry|Maths|English|BatchYearAdmisnNo!Grade!Score Student1|81|65|70|80|88|EWS20211001!A!75 Student2|72|63|60|50|75|EWS20211002!A!85 Student3|72|63|60|50|75|EWS20211002!A!85