如果条件为一,我如何让nawk evauluate两个?

时间:2017-02-17 16:20:08

标签: awk multiple-conditions

对于数据集:

12345   78945
12345   45678

我需要输出

12345   45678

长话短说,有时两个值代表同一个对象,因为我的薪资等级以上的某些做法。因此,使用表示同一对象的已知值对的列表,我需要awk从输出中过滤这些值。在上述情况下,12345和78945表示相同的对象,因此应将其过滤掉。剩下的行是我应该引起注意的错误。

我的尝试代码

cat data | nawk '(($1!="12345")&&($2!="78945"))'

生成一个空集作为输出。所以我要么在脑子里提出一个逻辑错误,要么就是一个语法错误,即nawk单独评估每个条件就好像写成cat data | nawk '($1!="12345")&&($2!="78945")'一样,从而过滤掉两者,因为两者都失败了第一个条件。

我确信这只是我对nawk如何解决这些事情的不熟悉。在此先感谢您的任何帮助。由于原因,这必须在nawk中完成。

1 个答案:

答案 0 :(得分:4)

您的示例数据中没有$1!="12345"为真的行,因此没有&&任何其他条件可以为真的条件。想一想。这与awk无关 - 它是简单的布尔逻辑。

尝试其中任何一种,无论你感觉更清楚:

nawk '($1!="12345") || ($2!="78945")' data
nawk '!(($1=="12345") && ($2=="78945"))' data
nawk '($1=="12345") && ($2=="78945"){next} 1' data
nawk '($1" "$2) != "12345 78945"' data
nawk '!/^[ \t]*12345[ \t]+78945([ \t+]|$)/' data

也是谷歌UUOC了解我为什么要摆脱cat data |