用awk否定条件

  • 本文关键字:条件 awk bash shell awk
  • 更新时间 :
  • 英文 :


我似乎不知道如何用awk否定我的条件。

例如,假设我有

g ha
a bb
g hc
f cd
t de
g pf

我可以只打印第一列和第二列的g和h开头的:

cat test.txt | awk '$1 ~ /g/ && $2 ~ /^h/'

但我如何做相反的事情,我只想打印那些不是g的,并从h开始。基本上要有输出:

a bb
f cd
t de
g pf

如果$1 ~ /g/ && $2 ~ /h/为true,则继续下一行,否则输出当前行。

awk '$1 ~ /g/ && $2 ~ /h/{next} {print}' test.txt

输出:

a bf ct dg p

您也可以使用!否定整个匹配

由于第一个字段始终是单个字符,您可以在不使用regex表示法的情况下检查它是否为g,因为如果字符串中的某个位置有g$1 ~ /g/仍然匹配。

awk '!($1 == "g" && $2 ~ /^h/)' test.txt

输出

a bb
f cd
t de
g pf

$1 ~ /g/ && $2 ~ /^h/或任何其他条件的否定(相反(只是将!粘贴在它的前面:

$ awk '!($1 ~ /g/ && $2 ~ /^h/)' file
a bb
f cd
t de
g pf

但你也可以将布尔代数应用于此(!(a && b)=!a || !b(,得到:

$ awk '$1 !~ /g/ || $2 !~ /^h/' file
a bb
f cd
t de
g pf

相关内容

  • 没有找到相关文章

最新更新