ログファイルからユーザーエージェント文字列を抽出する方法は?

ログファイルからユーザーエージェント文字列を抽出する方法は?

現在、最も要求されたコンテンツを取得するために、次のコマンドを実行しています。

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

これでユーザーエージェント文字列を見たいのですが、問題はここに複数のスペースが含まれていることです。これは一般的なログファイルの行です。 UAは引用符で区切られた最後の部分です。

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"

awkより良いツールがありますか?

答え1

形式が一貫していて、フィールドが実際に二重引用符で囲まれている場合は、awkまたはcut withを"フィールド区切り文字として使用できます。

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

または:

cut -d\" -f 6

答え2

perl -ne 'if(/"([^"]+)"$/){$ua{$1}++;} END{for(keys %ua){print "$ua{$_} $_\n "}}'\
  アクセスログ

関連情報