このような入力があり、最後の成績列を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
答え1
そしてawk
。 4つのキーと値のペアをすべて配列(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名数学物理学工学科学日付グレード 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
答え2
簡単な検索と置換sed
。列がいくつかのスペースで区切られているとします。
sed 's/ 9$/ AB/; s/ 12$/ RE/; s/ 23$/ A1/; s/ 34$/ FA/' file
出力:
ST名数学物理学工学科学日付グレード 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