我有一个简单的问题,但我想不出来。
我有一个文件,我想打印所有与我在awk if条件中指定的条件不匹配的行。但我可以把条件打印出来,另一个怎么做?
这是我的密码:
awk '{if ($18==0 && $19==0 && $20==0 && $21==0) print $0}' file
我也试过这个:
awk '{if !($18==0 && $19==0 && $20==0 && $21==0) print $0}' file
但是第二个不起作用,任何帮助都是值得感激的。谢谢。
发布于 2014-06-24 04:07:52
否定句(!
)需要放在括号内:
awk '{if (!($18==0 && $19==0 && $20==0 && $21==0)) print $0}' file
我们在里面再加一套包装所有的东西。
(FYI,如果您给出了它如何“不工作”(即!
上的语法错误),那就更有帮助了。请记住包括错误信息或不适用于未来问题的症状!)
发布于 2014-06-24 04:43:06
在这里你可以:
awk '$18+$19+$20+$21!=0' file
不需要print $0
,因为它的默认操作。
发布于 2014-06-24 04:11:23
您还可以反转条件语句:
你想要的相反的是:
awk '{if ($18==0 && $19==0 && $20==0 && $21==0) print $0}' file
可以是:
awk '{if ($18!=0 || $19!=0 || $20!=0 || $21!=0) print $0}' file
或
awk '{if (!($18==0 && $19==0 && $20==0 && $21==0)) print $0}' file
例子:
!cat file
A 0 0 0
B 1 1 1
C 1 0 1
awk '$2+$3+$4!=0' file
B 1 1 1
C 1 0 1
awk '{if ($2!=0 || $3!=0 || $4!=0) print $0}' file
B 1 1 1
C 1 0 1
awk '{if (!($2==0 && $3==0 && $4==0)) print $0}' file
B 1 1 1
C 1 0 1
awk '{if (!($2==0 || $3==0 || $4==0)) print $0}' file
B 1 1 1
https://stackoverflow.com/questions/24386168
复制相似问题