J'ai une commande sur une ligne qui répertorie les 10 meilleures adresses IP les plus actives d'un journal d'accès au serveur Web:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10
Un exemple de jeu de résultats (avec seulement 3 entrées pour plus de simplicité) serait:
20 12.34.56.7
22 3.67.89.201
29 9.0.203.255
Comme vous pouvez le voir, le nombre précède l'adresse IP, les deux étant séparés par un espace vide. Il y a également des espaces vides précédant le décompte, mais je ne peux pas les faire apparaître ici.
J'aime faire une recherche DNS inversée des adresses IP pour qu'elles ressemblent à ceci:
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)
Comment puis-je faire cela sans avoir recours à un script (c'est-à-dire, s'en tenir à une commande sur une ligne)? Tout conseil est fort apprécié.
la source
while
divise l'entrée en fonction de l'espace blanc, vous pouvez donc lire le nombre et l'adresse IP séparément. Voir ma mise à jour. Vous pouvez jouer avecdig
les options de pour changer la sortie - je ne l'ai pas vraiment utilisée.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
appréciez votre aimable aide!for i in `cat input.txt` ; do dig +noall +answer -x $i ; done >> output.txt
cat file | xargs -n1 dig +noall +answer -x