awk,从子字符串中删除字符

awk,从子字符串中删除字符

我有以下 csv。我正在尝试删除 2017 年中的 20,因此其格式类似于 3717 或 31817。由于某些日期的天数为个位数,因此位置始终不同。由于年份始终是 4 位数字,如何从右向左删除第二列中的 20?

12 322017 EOD 交易 J 87.75   
123232017 EOD 交易 J 155  
45 3302017 EOD 交易 J 270 

预期输出

12 3217 EOD 交易 J 87.75   
12 32317 EOD 交易 J 155  
45 33017 EOD 交易 J 270

答案1

awk方法:

awk '{match($2, /^([0-9]+)[0-9]{2}([0-9]{2})$/, a); $2=a[1]a[2]}1' file

输出:

12 3217 EODTRANSACTION J 87.75
12 32317 EODTRANSACTION J 155
45 33017 EODTRANSACTION J 270

match($2, /^([0-9]+)[0-9]{2}([0-9]{2})$/, a)- 将捕获第二个字段中除3研发和4末尾的第 th 位数字

答案2

将第二个字段替换为以下结果:将第二个字段中的第一个“20”替换为空字符串,然后打印结果行:

awk '{$2=gensub("20", "", 1, $2); print;}' input > output

相关内容