Eu tenho um comando de uma linha que lista os 10 principais endereços IP mais ativos de um log de acesso ao servidor da Web:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10
Um conjunto de resultados de amostra (com apenas 3 entradas para simplificar) seria:
20 12.34.56.7
22 3.67.89.201
29 9.0.203.255
Como você pode ver, a contagem precede o endereço IP, com os dois separados por um espaço em branco. Na verdade, também existem espaços em branco que precedem a contagem, mas não consigo mostrá-los aqui.
Eu gosto de fazer uma pesquisa DNS reversa dos endereços IP, para que fique assim:
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)
Como posso fazer isso sem recorrer a um script (ou seja, seguindo um comando de uma linha)? Qualquer conselho é muito apreciado.
fonte
while
divide a entrada com base em espaço em branco, para que você possa ler a contagem e o endereço IP separadamente. Veja minha atualização. Você pode brincar comdig
as opções para alterar a saída - eu realmente não a usei.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
Agradecemos sua ajuda!for i in `cat input.txt` ; do dig +noall +answer -x $i ; done >> output.txt
cat file | xargs -n1 dig +noall +answer -x