Ich entnehme IP-Adressen dem Zugriffsprotokoll und möchte herausfinden, woher diese IP-Adressen stammen. Dazu verwende ich dieses Skript:
cat /var/log/nginx/access.log |awk '{ print $1}'|sort| uniq -c |sort -n -r | awk '{print $2}'
Eine Beispielausgabe ist:
1.2.3.4
5.6.7.8
...
Ich kann das Ergebnis nslookup
mit dem Pipeline- |
Befehl übergeben, aber das Ergebnis ist nicht leicht lesbar. Deshalb habe ich versucht, den Befehl zu verwenden, host
aber die einzige Ausgabe ist eine Information zur Verwendung des host
Befehls.
Wie kann ich host
einen Befehl zum stapelweisen Auflösen von IP-Adressen verwenden?
Antwort1
Sie können xargs verwenden, es konvertiert Eingaben von der Standardeingabe in Argumente für einen Befehl.
Die Option -n begrenzt die Argumente auf eins (durch eine neue Zeile getrennt) und ruft den Host für jedes davon mehrmals auf. So haben Sie folgende Möglichkeiten:
cat /var/log/nginx/access.log |awk '{ print $1}'|sort| uniq -c |sort -n -r | awk '{print $2}' | xargs -n 1 host