Làm thế nào tôi có thể trích xuất các chuỗi tác nhân người dùng từ một tệp nhật ký?


12

Hiện tại tôi đang chạy một lệnh như thế này, để có được nội dung được yêu cầu nhiều nhất:

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

Bây giờ tôi muốn xem các chuỗi tác nhân người dùng, nhưng vấn đề là chúng bao gồm một số khoảng trắng. Đây là một dòng tệp nhật ký điển hình. UA là phần cuối cùng được phân định bằng dấu ngoặc kép:

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"

Có một công cụ tốt hơn awk cho điều này?

Câu trả lời:


19

Nếu định dạng đó phù hợp và trường thực sự được bao bọc trong dấu ngoặc kép, bạn có thể sử dụng awk hoặc cắt với "dấu phân cách trường:

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

hoặc là:

cut -d\" -f 6

3
perl -ne 'if (/ "([^"] +) "$ /) {$ ua {$ 1} ++;} END {for (phím% ua) {in" $ ua {$ _} $ _ \ n "}} '\
  access_log
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.