Awk

更改最後一列的值

  • November 30, 2021

我有這樣的輸入,我試圖用 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

引用自:https://unix.stackexchange.com/questions/679372