不带管道的 awk 的“grep string | grep string”

不带管道的 awk 的“grep string | grep string”

有没有办法做到:

output | grep "string1" | grep "string2" 

但是使用 awk,没有管道?

就像是:

output | awk '/string1/ | /string2/ {print $XY}'

如果有意义的话,结果应该是匹配的子集。

答案1

默认操作awk是打印,所以相当于

output | grep string1 | grep string2

output | awk '/string1/ && /string2/'

例如

$ cat tst
foo
bar
foobar
barfoo
foothisbarbaz
otherstuff

$ cat tst | awk '/foo/ && /bar/'
foobar
barfoo
foothisbarbaz

答案2

如果你想awk找到两者都匹配的行string1 string2,以任何顺序,使用&&

 output | awk '/string1/ && /string2/ {print $XY}'

如果您想要匹配其中一个(string1string2两个),请使用||

 output | awk '/string1/ || /string2/ {print $XY}'

相关内容