更改最后一列的值

更改最后一列的值

我有这样的输入,我尝试将最后的成绩列替换为 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

相关内容