我需要删除第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
Run Code Online (Sandbox Code Playgroud)
后:
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
Run Code Online (Sandbox Code Playgroud)
任何一个班轮都会非常有帮助.
我知道:
sed '/0/d' file_name
Run Code Online (Sandbox Code Playgroud)
但是上面的命令将从所有列中删除0.
甚至更快:
awk '$5' file
Run Code Online (Sandbox Code Playgroud)
如果第5个字段不是,0
则条件被评估为true - 请注意这{print $0}
是默认块,awk
因此如果这是您要执行的唯一操作,则可以省略它.
这绝对更适合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
Run Code Online (Sandbox Code Playgroud)
但如果你真的想要一个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
Run Code Online (Sandbox Code Playgroud)
使用便携式 sed 你可以这样做:
sed '/\([^ ]\+ \+\)\{4\}0\+ /d'
Run Code Online (Sandbox Code Playgroud)
这样您就可以将零检查范围限制到第五列。
使用 perl,您可以使用自动拆分,请注意,您不需要指定条件, $F[4]
因为它是隐式的:
perl -ane 'print if $F[4]'
Run Code Online (Sandbox Code Playgroud)
两种情况下的输出:
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
Run Code Online (Sandbox Code Playgroud)