Tengo un comando de una línea que enumera las 10 principales direcciones IP más activas de un registro de acceso al servidor web:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10
Un conjunto de resultados de muestra (con solo 3 entradas para simplificar) sería:
20 12.34.56.7
22 3.67.89.201
29 9.0.203.255
Como puede ver, el recuento precede a la dirección IP, con los dos separados por un espacio en blanco. En realidad, también hay espacios en blanco que preceden al conteo, pero no puedo hacer que se muestren aquí.
Me gusta hacer una búsqueda DNS inversa de las direcciones IP para que se vea así:
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)
¿Cómo puedo hacer esto sin recurrir a un script (es decir, apegarme a un comando de una línea)? Cualquier consejo es muy apreciado.
fuente
while
divide la entrada en función del espacio en blanco, por lo que puede leer el recuento y la dirección IP por separado. Mira mi actualización. Puedes jugar condig
las opciones para cambiar la salida, no la he usado realmente.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
Agradezco su amable ayuda!for i in `cat input.txt` ; do dig +noall +answer -x $i ; done >> output.txt
cat file | xargs -n1 dig +noall +answer -x