Saya memiliki perintah satu baris yang mencantumkan 10 alamat IP paling aktif teratas dari log akses server web:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10
Kumpulan hasil sampel (dengan hanya 3 entri untuk kesederhanaan) adalah:
20 12.34.56.7
22 3.67.89.201
29 9.0.203.255
Seperti yang Anda lihat, hitungan mendahului alamat IP, dengan keduanya dipisahkan oleh ruang kosong. Sebenarnya ada ruang kosong sebelum penghitungan juga, tetapi saya tidak bisa membuatnya ditampilkan di sini.
Saya suka melakukan reverse DNS lookup dari alamat IP sehingga akan terlihat seperti ini:
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)
Bagaimana saya bisa melakukan ini tanpa menggunakan skrip (yaitu, berpegang pada perintah satu baris)? Setiap saran sangat dihargai.
sumber
while
membagi input berdasarkan spasi, sehingga Anda dapat membaca jumlah dan alamat IP secara terpisah. Lihat pembaruan saya. Anda dapat bermain dengandig
opsi untuk mengubah output — saya belum pernah menggunakannya.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
Hargai bantuan baik Anda!for i in `cat input.txt` ; do dig +noall +answer -x $i ; done >> output.txt
cat file | xargs -n1 dig +noall +answer -x