如何删除bash(awk)中具有2个条件的行

如何删除bash(awk)中具有2个条件的行,bash,awk,Bash,Awk,我有以下问题: 我有这样一个文件: 1 3 4 2 5 6 3 1 3 4 1 0 5 7 0 6 0 1 我想删除第二列1和第三列0中的一行。因此,结果应该是: 1 3 4 2 5 6 3 1 3 5 7 0 6 0 1 我试过:awk'$2=1 && $3 != 0'文件 但它也将删除以下行:“570”和“313” 有什么帮助吗 您正在寻找$2==1&&$3==0的否定。根据逻辑规则,这是 awk '$2 != 1 || $3 != 0' 你想要: awk '!( $2==1 &

我有以下问题: 我有这样一个文件:

1 3 4
2 5 6
3 1 3
4 1 0
5 7 0
6 0 1
我想删除第二列1和第三列0中的一行。因此,结果应该是:

1 3 4
2 5 6
3 1 3
5 7 0
6 0 1
我试过:
awk'$2=1 && $3 != 0'文件

但它也将删除以下行:“570”和“313”


有什么帮助吗

您正在寻找
$2==1&&$3==0的否定。根据逻辑规则,这是

awk '$2 != 1 || $3 != 0'
你想要:

awk '!( $2==1 && $3 == 0)' file
或者,相当于:

awk '$2 != 1 || $3' file
这将确保:

 awk '!($2==1 && $3==0){print}' file
i、 e.打印除第二列为1、第三列为0的行以外的所有行。

试试这个

awk '$2$3!="10"' file

干杯

您的问题是,与awk的行为方式相比,您以一种消极的方式表达您的需求,这迫使您以一种消极的方式思考您的解决方案,并导致双重消极/复杂化。您不想“删除一行…”因为awk不是这样做的,所以awk会选择行。因此,只需用英语表达“我想选择第二个字段不为1或第三个字段不为零的所有行”,然后简单地翻译成代码,如下面大多数答案所示,如
awk'$2=1 || $3!=0'文件
连接字段并测试是否匹配某个连接的值是一个常见错误,但如果,例如,$2为“10”,而$3为“”,则该错误将失败,因此最好避免使用该错误。
{print}
是多余的。