Linux

使用 head 和 fgrep 從數千個日誌文件中找到正確的日誌文件

  • June 13, 2018

我有數千個日誌文件——都非常大。其中之一將有一個我正在尋找的 IP 地址。我知道它很可能發生在文件頂部附近。我可以:

head -n 500 *.log | fgrep myip

我會看到“是”,它在一個日誌文件中。我如何確定是哪一個?由於文件的大小,無法獲取所有文件的完整內容 (fgrep myip *.log)。

這樣的事情應該會有所幫助。

find . -iname "*.log" -print0 | xargs -0 -i{} bash -c 'echo "»»»File Name: {}«««"; head -n 500 {} | fgrep -B 501 myip'

它將產生一長串文件名,然後是最多 500 行找到的數據,然後是一長串文件名。您想要的文件名是緊接在長數據列表之前的文件名。

你可以只用 awk 就可以逃脫:

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

如果在目前行中找到 IP,我們列印它和文件名。FNR如果目前文件 ( ) 的目前行號已變為 > 500,我們將跳至下一個文件。

引用自:https://unix.stackexchange.com/questions/449203