2017-02-05 13 views
0

我在Linux中的一個特定目錄中的大約50個.gz文件。我需要在每個文件中找到一個特定的行。目前我正在通過zcat每個文件做。在.gz文件列表中找到一行

例如:

zcat 20160909-custfw.log.7.gz | zgrep BGP | zgrep 145.247.1.62 

輸出:

09月09日17點12分47秒145.247.1.62帽-S12-custfw-1:的NetScreen DEVICE_ID =帽-S12-custfw-1 [根]系統信息-00542:BGP對等 10.24.224.187變爲空閒狀態(2016年9月9日17時13分15秒)

請讓我,如果有任何更簡單的方法 做這個。

+0

我很驚訝,以上實際工作。 zcat解壓縮整個事物並將所有內容打印到標準輸出。這裏絕對沒有任何理由,你正在浪費很多CPU週期。 – GhostCat

+0

此外。這個網站是關於編程問題。例如,你的問題寧願去unix.stackexchange.com。 – GhostCat

回答

0

搜索它們並聯GNU並行

parallel zgrep BGP {} ::: *.gz | grep 145.247.1.62 

如果你知道它只是在每個文件中出現一次,或者只在第一次出現有興趣,使用zgrep -m1以免打擾讀取文件的剩餘部分,並停止在第一場比賽。

+0

謝謝,這正是我正在尋找,我想檢查第一次出現。 – user7315541

2

如果您已安裝zgrep,則不應該有zcat該文件。 zgrep的全部要點是讓你直接grep gzip文件。因此,你應該僅僅是能夠做到這一點:

zgrep BGP *.gz | grep 145.247.1.62 

這應該是稍微更高性能的爲好。

1

zgrep 'BGP.*145.247.1.62' $dir/*.gz怎麼樣?

(或者達到相同的結果你兩個zgrep調用的順序,你就必須也zgrep兩個正則表達式的逆順序,某事像zgrep 'BGP.*145.247.1.62\|145.247.1.62.*BGP' $dir/*.gz