基于文本代码的Awk / Perl / Sed列替换
发布时间:2020-12-13 23:56:18 所属栏目:Linux 来源:网络整理
导读:我有一个包含以下内容的文本文件 L,4m,06/03/2013L,33GJm,06/03/2013,GL,44Bm,BL,4q,08/03/2013J,04/03/2013J,3GU,04/03/2013,GJ,3jm,3GJ,BJ,34Bq,08/03/2013,BM,4v,12/03/2013D,12/03/2013,GD,4B,11/03/2013,BD,13/03/2013,14/03/2013,34Bm,33BUq,3BJUq,44B
我有一个包含以下内容的文本文件
L,4m,06/03/2013 L,33GJm,06/03/2013,G L,44Bm,B L,4q,08/03/2013 J,04/03/2013 J,3GU,04/03/2013,G J,3jm,3GJ,B J,34Bq,08/03/2013,B M,4v,12/03/2013 D,12/03/2013,G D,4B,11/03/2013,B D,13/03/2013,14/03/2013,34Bm,33BUq,3BJUq,44Bq,3Bq,15/03/2013,3q,15/03/2013 J,34Bjq,33GUm,13/03/2013 J,33GUq,13/03/2013 M,3BU,18/03/2013,19/03/2013,G M,22/03/2013,34Bv,19/03/2013 L,33BUm,18/03/2013 J,22/03/2013 J,22/03/2013 A,28/03/2013,27/03/2013,25/03/2013,33BUa,26/03/2013,4a,28/03/2013 我想基于以下编码系统翻译第二列. 如果$2以1或2开头 – 将$2更改为Excellent 我可以使用以下命令找到并将3BU更改为Good awk 'BEGIN{FS=",";OFS=","} {if ($2~ /3(B|G)U/)print $1,"Good",$3}' file | sponge file 虽然我使用所有其他非3(B | G)U线.我可以使用if else术语虽然这似乎不优雅.我曾尝试使用gensub来解决问题 awk -F,'{gensub(/3(B|G)U/,Good,"",2)}1' file 但这会打印文件内容而不进行替换.任何提示 期望的输出 L,Poor,Ok,G perl或sed one-liner也很有用,因为这段代码构成了bash shell脚本的一部分 解决方法$awk ' BEGIN { FS=OFS="," } $2 ~ /^(1|2)/ { $2 = "Excellent" } $2 ~ /3(B|G)U/ { $2 = "Good" } $2 ~ /3(B|G)J/ { $2 = "OK" } $2 ~ /^4/ { $2 = "Poor" } $2 ~ /^5/ { $2 = "Terrible" } 1 ' foo.txt | head -n 10 L,OK,B (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |