awkとgrepの比較

awkとgrepの比較

非常に大きなファイルに対して、次の2つのコマンドを実行しました。

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

awk '/string1|string2/ && /string3/ && /string4/' 151103*.log

実行時間はほぼ同じです。しかし、awk一致する結果がより早く現れました。grepまた、同じ結果が表示されますが、最後に処理が完了します。

どちらのプロセスも同じ時間がかかり、検索とawkその背後にあるロジックが気になりますgrep

なぜより速いのですawkか?これら2つのプログラムは異なる検索ロジックを持っていますか?上記の検索で文字列を難読化すると、検索速度に影響しますか?

ベストアンサー1

GNUはgrep出力をバッファリングしますが、GNUはawkバッファリングしません。 GNUを使用せずにawk他のバリアントを使用しても、端末に印刷するとまだラインバッファリングされているため、\newlineの出力は発生するたびにフラッシュされますが、grepパイプに書き込むとブロックされます。バッファが何であれ。 GNUがある場合は、これをgrep使用grep --line-buffered ... | grep ...して比較してできるだけ早く結果を確認できます。おそらく、grepほぼすべての競争テストawk、特にGNUで勝つでしょうgrep

これsedもあなたが望むことを行います:

sed -ne'/string4/{/string3/s/string[12]/&/p;}' <in >out

おすすめ記事