我有一张桌子
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)