2016-08-12 4 views
0

Ich bin auf der Suche nach einem Skript, das mir erlauben würde, meine Quelldatei mit "Quellports" zu verwenden, um in einer Protokolldatei nachzuschlagen Entspricht "Quellport" und druckt dann die gesamte Zeile in eine Datei aus.Skript Quelldatei1 verwenden, um Datei2 nach übereinstimmenden Einträgen zu suchen und sie in Zieldatei3 zu drucken

gibt es ca. 5000 Quell-Ports in einer einzigen Spalte in meiner Quelldatei

Dank für Ihre Hilfe danken! Mit freundlichen Grüßen B

Antwort

0

Sie haben nicht zu viele Details angegeben, aber ich nehme an, es geht um Bash.

Wenn ja, für diese Beispiel ports Datei:

80 
443 
8080 

Und logs Datei:

2016-01-01 www.google.pl:80 200 OK 
2016-01-02 www.google.pl:22 200 OK 
2016-01-03 www.google.pl:443 200 OK 
2016-01-04 www.google.pl:80 200 OK 
2016-01-05 www.google.pl:123 200 OK 

Dies funktioniert:

while read line   
do   
    ports[$line]=1   
done <ports 

while read line 
do 
    [[ $line =~ :([[:digit:]]+) ]] && [[ ${ports[${BASH_REMATCH[1]}]} == 1 ]] && echo $line 
done <logs >logs.filtered 

Es Hashes im Grunde Ports in bash assoziatives Array und scannt durch die Protokolldatei, die bei Übereinstimmung ausgibt.

Passen Sie das Regexp- und Dateiformat an Ihre Bedürfnisse an.

Sie könnten vielleicht dasselbe mit Hilfe von awk, join oder anderen Utils erreichen - aber für diesen einfachen Fall ist das genug.

+0

Hallo und vielen Dank für Ihre Hilfe, aber ich folgende beim Ausführen des Skripts „) Syntaxfehler: ungültiger arithmetischen Operator (Fehler-Token sind“ immer ./script.sh: Linie 9: 08: Wert zu groß für Base (Fehler Token ist "08") – user2301195

+0

Verwenden Sie Bash (nicht ksh, sh, ...) Können Sie genaue Eingaben zur Verfügung stellen, die Sie verwenden? –

Verwandte Themen