awk打印条件

时间:2014-06-24 12:03:25

标签: awk

我有一个简单的问题,但我无法弄清楚。

我有一个文件,我想要打印所有与我在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

但第二个不起作用,任何帮助都表示赞赏。谢谢。

3 个答案:

答案 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