Bagaimana cara mengekstrak string agen pengguna dari file log?

12

Saat ini saya sedang menjalankan perintah seperti ini, untuk mendapatkan konten yang paling banyak diminta:

grep "17\/Jul\/2011" other_vhosts_access.log | awk '{print $8}' | sort | uniq -c | sort -nr

Saya ingin sekarang melihat string agen pengguna, tetapi masalahnya adalah mereka menyertakan beberapa spasi. Berikut ini adalah baris file log yang khas. UA adalah bagian terakhir yang dibatasi oleh tanda kutip:

example.com:80 [ip] - - [17/Jul/2011:23:59:59 +0100] "GET [url] HTTP/1.1" 200 6449 "[referer]" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30"

Apakah ada alat yang lebih baik daripada awk untuk ini?

DisgruntledGoat
sumber

Jawaban:

19

Jika format itu konsisten dan bidang tersebut benar-benar dibungkus dengan tanda kutip ganda, Anda dapat menggunakan awk atau cut dengan "sebagai pembatas bidang:

awk -F\" '{print $6}'

atau:

cut -d\" -f 6
Caleb
sumber
3
perl -ne 'if (/ "([^"] +) "$ /) {$ ua {$ 1} ++;} END {untuk (kunci% ua) {print" $ ua {$ _} $ _ \ n "}} '\
  access_log
RedGrittyBrick
sumber