![Verwenden von Awk zum Drucken der gewünschten Zeilen von nslookup](https://rvso.com/image/134421/Verwenden%20von%20Awk%20zum%20Drucken%20der%20gew%C3%BCnschten%20Zeilen%20von%20nslookup.png)
Ich möchte den Namen und die IP ausdrucken, die sich aus einem NSLookup ergeben, damit ich sie in eine Datei ausgeben kann.
Wenn ich einen nslookup
auf einem Host ausführe, erhalte ich ein Ergebnis wie dieses:
Server: 10.10.10.10
Address: 10.10.10.10#53
Name: EXAMPLE.example.com
Address: 10.10.10.100
Ich möchte den Namen und die IP in separaten Spalten einer Datei ausgeben, daher lautet mein aktueller Befehl:
nslookup EXAMPLE.example.com | awk 'FNR ==4 {print$2}' | awk 'FNR ==5 {print$2}'
Ich bekomme nichts, obwohl die einzelnen Awks jeweils den richtigen Wert zurückgeben. Mir ist klar, warum das nicht funktioniert, aber ich frage mich, welche Syntax die richtige ist, um beide Ergebnisse in die entsprechenden Spalten auszudrucken.
Antwort1
nslookup EXAMPLE.example.com \
| awk '/^Name:/ {N=$2}; /^Address:/ {A=$2}; END {print N,A}'
Druckt nur den Nachnamen und die Adresse. Wenn Sie jedoch alle möchten:
nslookup EXAMPLE.example.com \
| awk '/^Name:/ {N=$2}; /^Address:/ {print N,$2}'
Antwort2
Stattdessen verwenden dig
:
$ dig +noall +answer example.com | awk '{ print $1, $NF }'
example.com. 93.184.216.34
$ dig +noall +answer www.google.com | awk '{ print $1, $NF }'
www.google.com. 172.217.20.36
Das awk
Skript druckt das erste und letzte durch Leerzeichen getrennte Feld aus der Ausgabe des dig
Befehls (die Rohausgabe enthält dazwischen auch einige andere Spalten).
Ihr Befehl:
nslookup EXAMPLE.example.com | awk 'FNR ==4 {print$2}' | awk 'FNR ==5 {print$2}'
Dies funktioniert nicht, da das zweite awk
Programm versucht, die fünfte Zeile aus der Ausgabe des ersten awk
Programms zu erhalten, das nur eine einzige Zeile ausgibt.
So etwas hätte vielleicht funktioniert,
$ nslookup example.com | awk 'FNR == 4 || FNR == 5 { print $2 }'
answer:
example.com
aber auf meinem System stehen die gewünschten Daten, wie Sie sehen, in anderen Zeilen (nicht in Zeile 4 und 5). Das funktioniert bei Ihnen vielleicht besser.
Antwort3
nslookup -type=A cdnjs.cloudflare.com | awk '/^Name:/ {c=2;N=$2} !--c {print N,$2}'
wodurch alle Datensätze ausgedruckt werden:
cdnjs.cloudflare.com 104.16.18.94
cdnjs.cloudflare.com 104.16.19.94
Im Gegensatz zu anderen Lösungen gleicht dieses Skript nur die tatsächliche Antwort ab und nicht die DNS-Serveradresse. Im Fehlerfall gibt es nichts aus.
Inspiriert wurde dies durcheine Antwort auf diese Frage.