我在文件中有列
1 11469 12272 ABCD:E1.121 +
我希望输出为
1 11469 12272 ABCD:E1 +
我试过
awk '{ sub(/./,"",$4); print }' file
我得到像
这样的东西 1 11469 12272 BCD:E1.121 +
而不是我想要的,这是
1 11469 12272 ABCD:E1 +
答案 0 :(得分:2)
请注意.
是正则表达式中的元字符;它匹配任何字符(换行符除外)。这就是A
消失的原因。你需要/\.[0-9]+/
之类的东西作为正则表达式,以消除后面的小数点和数字。
$ cat data
1 11469 12272 ABCD:E1.121 +
$ awk '{ sub(/./,"",$4); print }' data # Original script; wrong output
1 11469 12272 BCD:E1.121 +
$ awk '{ sub(/\.[0-9]+/, "", $4); print }' data # Modified script; right output
1 11469 12272 ABCD:E1 +
$
请注意,我已经假设你要删除一个'分数' - 小数点和字段末尾的一些数字4.根据一行样本数据,这是有效的。如有必要,您可以优化正则表达式以匹配数据中的其他模式并适当地修改它们。您可以在加号后面添加$
以指示'小数点和数字到字段结尾'因此,ABCD:E1.234X
不会成为ABCD:E1X
,例如。
答案 1 :(得分:0)
awk '{sub(/E1.121 \+/,"E1 +")}1' file
1 11469 12272 ABCD:E1 +