在awk中选择两组条件

Joh*_*Tam 4 awk

我有一张桌子

1 1
1 0
0 1
0 0
Run Code Online (Sandbox Code Playgroud)

我想用OR分隔的两组选择标准打印行。

标准集 1 :(第 1 列 >= 1 和第 2 列 = 0)

或者

标准集 2 :(第 1 列 = 0 和第 2 列 >= 1)

预期输出是

1 0
0 1
Run Code Online (Sandbox Code Playgroud)

我写过这样的东西,但没有用

awk '($1>=1 && $2=0)||($1=0 && $2>=1) {print $0}'
Run Code Online (Sandbox Code Playgroud)

有什么问题?

Kus*_*nda 10

问题在于您使用的是赋值运算符 ( =) 而不是相等性测试 ( ==)。将零分配给某物的布尔结果是“假”。这就是测试永远不会成功的原因。


惯用的awk命令是

awk '($1 >= 1 && $2 == 0) || ($1 == 0 && $ 2 >= 1)'
Run Code Online (Sandbox Code Playgroud)

{ print $0 }不需要,因为这是不具有诉讼的任何条件的默认操作。

如果您只想跳过第一列和第二列中具有相同值的行(为给定数据提供相同的输出):

awk '$1 != $2'
Run Code Online (Sandbox Code Playgroud)

两种情况下的输出都是

1 0
0 1
Run Code Online (Sandbox Code Playgroud)