我正在尝试删除文件中符合两个特定条件的行的最后5个字符。该行必须以字母E开头,第二列数据必须等于数字2。 示例如下所示:
原材料:
E1234B123 1 4 12345A 12345 123.4
E1234B123 2 4 12345A 12345 123.4
E1234B123 3 4 12345A 12345 123.4
E1234B123 4 4 12345A 12345 123.4
C1234B123 2 4 12345A 12345 123.4
应该最终成为:
E1234B123 1 4 12345A 12345 123.4
E1234B123 2 4 12345A 12345
E1234B123 3 4 12345A 12345 123.4
E1234B123 4 4 12345A 12345 123.4
C1234B123 2 4 12345A 12345 123.4
我相信这可以用awk和sed完成,但我还没有掌握它们。谢谢您的帮助。
答案 0 :(得分:1)
你可以试试这个:
awk '{if ((substr($1,0,1)~"E") && (substr($2,0,1)~"2")) for (i=1;i<NF-1;i++) printf("%s ", $i)} END { printf("\n")}'
答案 1 :(得分:1)
awk '{ if ($1 ~ "^E" && $2 =="2") $(NF--)="";print}' data
这将删除最后一列,而不是5个字符
awk '{ if ($1 ~ "^E" && $2 =="2") print substr($0,0,length($0)-5); else print}' data
这会删除5个字符。
或perl:
perl -ne 'if (/^E.*\s2\s.*/){ print substr($_,0,-6)."\n" } else {print}' data
答案 2 :(得分:1)
此awk
应该:
awk '/^E/ && $2=="2" {$0=substr($0,1,length($0)-5)}1' file
E1234B123 1 4 12345A 12345 123.4
E1234B123 2 4 12345A 12345
E1234B123 3 4 12345A 12345 123.4
E1234B123 4 4 12345A 12345 123.4
C1234B123 2 4 12345A 12345 123.4
搜索以E
开头且第二个字段等于2
的行,然后删除最后5个字符。
删除最后一栏:
awk '/^E/ && $2=="2" {NF--}1' file
用空格替换最后5个字符:
awk '/^E/ && $2=="2" {$0=substr($0,1,length($0)-5)" "}1' file