在awk中删除列中的部分数据
Remove part of the data in a column in awk
我在文件中有列
1 11469 12272 ABCD:E1.121 +
我希望输出为
1 11469 12272 ABCD:E1 +
我试过了
awk '{ sub(/./,"",); print }' file
我得到了类似
的东西
1 11469 12272 BCD:E1.121 +
而不是我想要的
1 11469 12272 ABCD:E1 +
注意 .
是正则表达式中的一个元字符;它匹配任何字符(换行符除外)。这就是 A
消失的原因。您需要像 /\.[0-9]+/
这样的正则表达式,以消除小数点和后面的数字。
$ cat data
1 11469 12272 ABCD:E1.121 +
$ awk '{ sub(/./,"",); print }' data # Original script; wrong output
1 11469 12272 BCD:E1.121 +
$ awk '{ sub(/\.[0-9]+/, "", ); print }' data # Modified script; right output
1 11469 12272 ABCD:E1 +
$
请注意,我假设您要从字段 4 的末尾删除 'fraction' — 一个小数点和一些数字。基于一行示例数据,这是可行的。如有必要,您可以优化正则表达式以匹配数据中的其他模式并适当修改它们。例如,您可以在加号后添加一个 $
以表示 'decimal point and digits to end of field',这样 ABCD:E1.234X
就不会变成 ABCD:E1X
。
awk '{sub(/E1.121 \+/,"E1 +")}1' file
1 11469 12272 ABCD:E1 +
我在文件中有列
1 11469 12272 ABCD:E1.121 +
我希望输出为
1 11469 12272 ABCD:E1 +
我试过了
awk '{ sub(/./,"",); print }' file
我得到了类似
的东西 1 11469 12272 BCD:E1.121 +
而不是我想要的
1 11469 12272 ABCD:E1 +
注意 .
是正则表达式中的一个元字符;它匹配任何字符(换行符除外)。这就是 A
消失的原因。您需要像 /\.[0-9]+/
这样的正则表达式,以消除小数点和后面的数字。
$ cat data
1 11469 12272 ABCD:E1.121 +
$ awk '{ sub(/./,"",); print }' data # Original script; wrong output
1 11469 12272 BCD:E1.121 +
$ awk '{ sub(/\.[0-9]+/, "", ); print }' data # Modified script; right output
1 11469 12272 ABCD:E1 +
$
请注意,我假设您要从字段 4 的末尾删除 'fraction' — 一个小数点和一些数字。基于一行示例数据,这是可行的。如有必要,您可以优化正则表达式以匹配数据中的其他模式并适当修改它们。例如,您可以在加号后添加一个 $
以表示 'decimal point and digits to end of field',这样 ABCD:E1.234X
就不会变成 ABCD:E1X
。
awk '{sub(/E1.121 \+/,"E1 +")}1' file
1 11469 12272 ABCD:E1 +