Bash Grep|awk und Druckergebnis aus verschiedenen Dateien

Bash Grep|awk und Druckergebnis aus verschiedenen Dateien

Ich habe 2 Dateien, die IP-Adressen enthalten

1. Datei:

192.168.1.1:4.4.4.4
192.168.1.2:4.4.2.2
192.168.1.1:8.8.8.8
4.4.8.8:192.168.1.6
192.168.1.4:4.4.8.8

2. Datei:

4.4.2.2
4.4.8.8

Jetzt möchte ich ein Skript, das jeden Wert aus der zweiten Datei nimmt und prüft, ob dieser Wert in der ersten Datei vorhanden ist. Wenn der Wert vorhanden ist, sollte es die gesamte Zeile aus der ersten Datei ausdrucken.

Beispielsweise das gewünschte Ergebnis aus dem obigen Beispiel:

192.168.1.2:4.4.2.2
4.4.8.8:192.168.1.6
192.168.1.4:4.4.8.8

Antwort1

grep -F -f file2.txt file1.txt

Dadurch werden die Zeilen eingelesen file2.txtund als Muster für die Suche in verwendet file1.txt.


Wenn Sie nur nach Übereinstimmungen in der zweiten Spalte suchen möchten, können Sie diesen awk-Befehl verwenden:

awk -F: 'NR==FNR{a[$0];next}$2 in a' file2.txt file1.txt

Dadurch werden alle Zeichenfolgen gelesen file2.txtund ein Array ( a) mit ihnen erstellt. Anschließend wird file1.txtgeprüft, ob der Wert in Spalte 2 im aArray vorhanden ist. Wenn dies der Fall ist, wird die gesamte Zeile gedruckt.

Antwort2

Sie können die zweite Datei durchlaufen und von der ersten Datei aus greppen.

for pattern in `cat file2.txt` ; do grep $pattern file1.txt ; done

Wenn Sie nur das Ende nach dem Doppelpunkt abgleichen möchten.

for pattern in `cat file2.txt` ; do grep :$pattern$ file1.txt ; done

verwandte Informationen