我有一个简单的问题,但我无法弄清楚。
我有一个文件,我想要打印所有与我在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
但第二个不起作用,任何帮助都表示赞赏。谢谢。
答案 0 :(得分:6)
您可以在这里:
awk '$18+$19+$20+$21!=0' file
由于其默认操作,因此不需要 print $0
。
答案 1 :(得分:2)
否定(!
)需要在括号内:
awk '{if (!($18==0 && $19==0 && $20==0 && $21==0)) print $0}' file
我们在里面添加另一套来包装所有东西。
(仅供参考,如果您已经说明它“不起作用”(即!
上的语法错误),那会更有帮助。请记住包含错误消息或某些不起作用的症状对于未来的问题!)
答案 2 :(得分:0)
您也可以撤销条件声明:
你想要与之相反:
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