何千ものログファイルの中から正しいログファイルを見つけるには、headとfgrepを使用します。

何千ものログファイルの中から正しいログファイルを見つけるには、headとfgrepを使用します。

何千ものログファイルがあり、すべて非常に大きいです。そのうちの1つに私が探しているIPアドレスがあります。私はそれがファイルの上部近くで起こる可能性が最も高いことを知っています。私はできます:

head -n 500 *.log | fgrep myip

「はい」と表示され、これはログファイルの1つにあります。それがどれであるかをどのように決定しますか?ファイルサイズのため、すべてのファイル(fgrep myip * .log)の内容全体をgrepすることはできません。

ベストアンサー1

awkだけで脱出できます。

awk -v ip=127.0.0.1 'substr($0, ip) > 0 {print FILENAME ": " $0} FNR > 500 {nextfile}' *.log

現在の行でIPが見つかった場合は、IPとファイル名を印刷します。現在のファイル()の現在の行番号が500より大きい場合は、FNR次のファイルにジャンプします。

おすすめ記事