Verwenden von Awk zum Drucken der gewünschten Zeilen von nslookup

Verwenden von Awk zum Drucken der gewünschten Zeilen von nslookup

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 nslookupauf 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 awkSkript druckt das erste und letzte durch Leerzeichen getrennte Feld aus der Ausgabe des digBefehls (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 awkProgramm versucht, die fünfte Zeile aus der Ausgabe des ersten awkProgramms 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.

verwandte Informationen