对于数据集:
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中完成。
答案 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 |
。