Mam jedno-wierszowe polecenie, które wyświetla listę 10 najbardziej aktywnych adresów IP z dziennika dostępu do serwera WWW:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10
Przykładowy zestaw wyników (dla uproszczenia tylko 3 wpisy) to:
20 12.34.56.7
22 3.67.89.201
29 9.0.203.255
Jak widać, liczba poprzedza adres IP, a dwa oddzielone są spacją. Są też puste miejsca poprzedzające liczenie, ale nie mogę ich tutaj pokazać.
Lubię robić odwrotne wyszukiwanie adresów IP w DNS, aby wyglądało to tak:
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)
Jak mogę to zrobić bez uciekania się do skryptu (czyli trzymania się wiersza poleceń w jednym wierszu)? Wszelkie porady są mile widziane.
źródło
while
dzieli dane wejściowe na podstawie białych znaków, dzięki czemu można odczytać liczbę i adres IP osobno. Zobacz moją aktualizację. Możesz grać zdig
opcjami, aby zmienić wyjście - tak naprawdę go nie użyłem.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
doceń swoją miłą pomoc!for i in `cat input.txt` ; do dig +noall +answer -x $i ; done >> output.txt
cat file | xargs -n1 dig +noall +answer -x