Awk
更改最後一列的值
我有這樣的輸入,我試圖用 9 作為 AB,12 作為 RE,23 作為 A1,34 作為 FA 替換最後的等級列有沒有辦法用所述值更改等級列。
輸入:
ST NAME MATHS PHY ENG SCI DATE Grade XXXX 123 0 53 12 12 20 2021 9 YYYY 10 76 90 34 13 20 2021 12 ZZZZZ 234 76 65 0 14 20 2021 23 DDDD 90 78 45 19 15 20 2021 34
預期產出
ST NAME MATHS PHY ENG SCI DATE Grade XXXX 123 0 53 12 12 20 2021 AB YYYY 10 76 90 34 13 20 2021 RE ZZZZZ 234 76 65 0 14 20 2021 A1 DDDD 90 78 45 19 15 20 2021 FA
與
awk
. 將所有四個鍵值對放入一個數組 (a
) 中。將目前行的最後一列保存到變數 (last
),從目前行中刪除最後一個數字,gsub
並將數組中的值附加到剩餘行 ($0
):awk 'BEGIN{ a[9]="AB"; a[12]="RE"; a[23]="A1"; a[34]="FA" }; NR>1{ last=$NF; gsub(/[0-9]+$/,""); $0=$0 a[last] } { print }' file
輸出:
ST 名稱 數學 PHY ENG SCI 日期 年級 XXXX 123 0 53 12 12 20 2021 AB YYYY 10 76 90 34 13 20 2021 重新 ZZZZZ 234 76 65 0 14 20 2021 A1 DDDD 90 78 45 19 15 20 2021 FA