我有这样的输入,我尝试将最后的成绩列替换为 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
。将所有四个键值对放入一个数组 ( 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