我需要删除包含的行 第5列中的0值。
在:
1QWO 10 5 45 100 7.5
1R0R 6 3 15 100 8.5
1R5M 4 0 6 0 6.5
1R8S 4 0 6 0 6
1R9L 2 1 1 100 6.3
1RG8 6 0 15 0 5.8
1RJU 10 0 45 0 7.2
1RKI 12 6 66 100 4.6
后:
1QWO 10 5 45 100 7.5
1R0R 6 3 15 100 8.5
1R9L 2 1 1 100 6.3
1RKI 12 6 66 100 4.6
任何一个班轮都会非常有用。
我知道:
sed '/0/d' file_name
但是上面的命令将从所有列中删除0。
答案 0 :(得分:10)
awk '$5 != 0'
除非我添加这些额外的文字,否则机器不会让我提交。
答案 1 :(得分:8)
更快:
awk '$5' file
如果第5个字段不是0
,则条件被评估为真 - 请注意{print $0}
是awk
中的默认块,因此如果这是唯一的操作,则可以省略它你想表演。
答案 2 :(得分:6)
这绝对更适合awk
:
$ awk '$5!=0' file
1QWO 10 5 45 100 7.5
1R0R 6 3 15 100 8.5
1R9L 2 1 1 100 6.3
1RKI 12 6 66 100 4.6
但如果你真的想要一个sed
解决方案:
$ sed -r '/\S+\s+{4}0\s+/d' file
1QWO 10 5 45 100 7.5
1R0R 6 3 15 100 8.5
1R9L 2 1 1 100 6.3
1RKI 12 6 66 100 4.6
答案 3 :(得分:3)
使用便携式sed,您可以这样做:
sed '/\([^ ]\+ \+\)\{4\}0\+ /d'
这样就可以将检查零到第五列。
使用perl,您可以使用自动拆分,请注意您不需要为$F[4]
指定条件,因为它是隐式的:
perl -ane 'print if $F[4]'
两种情况下的输出:
1QWO 10 5 45 100 7.5
1R0R 6 3 15 100 8.5
1R9L 2 1 1 100 6.3
1RKI 12 6 66 100 4.6