2017-02-05 3 views
0

ich etwa 50. GZ-Dateien in einem bestimmten Verzeichnis in Linux. Ich muss eine bestimmte Zeile in jeder Datei finden. momentan mache ich per zcat jede datei.Finden Sie eine Zeile in einer Liste von .gz-Dateien

Eg:

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

Output:

Sep 9 17.12.47 145.247.1.62 cap-s12-custfw-1: NetScreen device_id = cap-s12-custfw-1 [Root] System-Information-00542: BGP Peer 10.24.224.187 geändert in den Ruhezustand (2016-09-09 17:13:15)

bitte lassen Sie mich, wenn es eine einfachere Weg ist, mach das.

+0

Ich bin überrascht, dass das obige tatsächlich funktioniert. Zcat dekomprimiert das Ganze und druckt alles auf den Standard. Sie verschwenden viele CPU-Zyklen für absolut keinen Grund hier. – GhostCat

+0

Neben. Auf dieser Seite geht es um Programmierprobleme. Ihre Frage würde beispielsweise eher an unix.stackexchange.com gehen. – GhostCat

Antwort

0

Suchen sie mit GNU parallel Parallel :

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

Wenn Sie wissen, verwenden Sie es kommt nur einmal in jeder Datei, oder sind in dem ersten Auftreten nur daran interessiert zgrep -m1 stört zu vermeiden, den Rest der Datei und stoppt auf dem ersten Spiel zu lesen.

+0

danke, das war genau ich suchte, ich möchte das erste Auftreten überprüfen. – user7315541

2

Wenn Sie bereits zgrep installiert haben, sollten Sie die Datei zcat nicht benötigen. Der Hauptzweck von zgrep besteht darin, Sie gziped Dateien direkt grep zu lassen. Daher sollten Sie einfach in der Lage sein, dies zu tun:

zgrep BGP *.gz | grep 145.247.1.62 

Dies sollte etwas leistungsfähiger als gut sein.

1

Was ist mit zgrep 'BGP.*145.247.1.62' $dir/*.gz?

(oder gleichwertige Ergebnisse zu Ihrer Sequenz von zwei zgrep Anrufe zu erreichen, würden Sie auch die umgekehrte Reihenfolge der beiden regulären Ausdrücke zgrep haben, etw wie zgrep 'BGP.*145.247.1.62\|145.247.1.62.*BGP' $dir/*.gz.)

Verwandte Themen