比较 awk 与 grep

Chi*_*tty 4 grep awk

我已经为一个非常大的文件运行了两个命令

grep -E 'string1|string2' 151103*.log|grep 'string3' | grep string4

awk '/string1|string2/ && /string3/ && /string4/' 151103*.log
Run Code Online (Sandbox Code Playgroud)

执行时间几乎相同。但是awk向我展示匹配的结果要快得多。grep也向我展示了相同的结果,但最后,当过程完成时。

两者都花费了相同的时间来完成该过程,只是想知道搜索awk和背后的逻辑grep

为什么awk更快?两个程序有不同的搜索逻辑吗?如果我在上面的搜索中混淆了字符串,会不会对搜索速度产生影响?

mik*_*erv 7

GNUgrep缓冲输出但 GNUawk没有。即使您没有使用 GNU 而是使用awk其他一些变体,如果您打印到终端,它可能仍然是行缓冲的,因此会为每个出现的\newline刷新输出,但是您grep对管道的写入会阻塞-无论如何缓冲。如果您有 GNU,grep您可以将其grep --line-buffered ... | grep ...用于比较以尽快查看结果。可能grepawk在几乎任何比赛测试中击败- 尤其是 GNU grep.

这是一个sed做你想做的事情:

sed -ne'/string4/{/string3/s/string[12]/&/p;}' <in >out
Run Code Online (Sandbox Code Playgroud)