
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.txt
und 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.txt
und ein Array ( a
) mit ihnen erstellt. Anschließend wird file1.txt
geprüft, ob der Wert in Spalte 2 im a
Array 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