Ich habe einen einzeiligen Befehl, der die 10 aktivsten IP-Adressen aus einem Webserver-Zugriffsprotokoll auflistet:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10
Eine Beispielergebnismenge (der Einfachheit halber mit nur 3 Einträgen) wäre:
20 12.34.56.7
22 3.67.89.201
29 9.0.203.255
Wie Sie sehen können, steht die Anzahl vor der IP-Adresse, wobei die beiden durch ein Leerzeichen getrennt sind. Es gibt tatsächlich Leerzeichen vor der Zählung, aber ich kann sie hier nicht anzeigen lassen.
Ich mache gerne eine umgekehrte DNS-Suche der IP-Adressen, damit es so aussieht:
20 12.34.56.7 (d12-34-56-7.abhsia.telus.net)
22 3.67.89.201 (customer.vpls.net)
29 9.0.203.255 (9-0-203-255.hlrn.qwest.net)
Wie kann ich dies tun, ohne auf ein Skript zurückzugreifen (dh mich an einen einzeiligen Befehl zu halten)? Jeder Rat wird sehr geschätzt.
quelle
while
die Eingabe basierend auf Leerzeichen aufgeteilt wird, sodass Sie Anzahl und IP-Adresse getrennt lesen können. Siehe mein Update. Sie können mitdig
den Optionen spielen, um die Ausgabe zu ändern - ich habe sie nicht wirklich verwendet.cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | sed "s/^[ \t]*//" | tail -n10 | while read count ip ; do echo "$count " "$ip" "( $(dig +noall +answer -x $ip | awk '{ print $(NF) }') )"; done
Schätzen Sie Ihre freundliche Hilfe!for i in `cat input.txt` ; do dig +noall +answer -x $i ; done >> output.txt
cat file | xargs -n1 dig +noall +answer -x