Nginxのログファイルがあり、ブラウザのメジャーバージョンごとの市場シェアを知りたい。マイナーバージョンやオペレーティングシステムには興味がありません。私はこのようなものを手に入れたいです:
100 IE6
99 IE7
20 IE8
200 FF2
300 FF3
ファイルからユーザーエージェントのリストを取得する方法は知っていますが、リストを集約してブラウザーのメジャーバージョンのみを表示したいと思います。それを行うツールはありますか?
_awk -F'"' '/GET/ {print $6}' /var/log/nginx-access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn
_
awk(1)
-GETリクエストの完全なユーザーエージェント文字列を選択するcut(1)
-最初のWordを使用するsort(1)
-並べ替えuniq(1)
-カウントsort(1)
-カウントによるソート、逆順PS。もちろん、1つのawk
/sed
/Perl
/python
/etcスクリプトで置き換えることができます。 unix-wayがいかに豊かであるかを示したかっただけです。
SaveTheRbtzによる1つのライナー がこの作業を行いますが、nginx
アクセスログを解析するのに数時間かかりました。
これは彼に基づくより高速なバージョンで、100 MBのログファイル(約100万行に相当)あたり1分もかかりません。
sed -n 's!.* "GET.* "\([[:alnum:].]\+/*[[:digit:].]*\)[^"]*"$!\1!p' /var/log/nginx/access.log | sort | uniq -c | sort -rfg
これは、Apacheのnginx
のcombined
形式と同じであり、User-Agent
で区切られた最後のフィールドとして"
を持つhttpd
のデフォルトアクセスログ形式で動作します。
これは、fgrep
とcut
を使用した、受け入れられた回答のわずかなバリエーションです。
cat your_file.log | fgrep '"GET ' | cut -d'"' -f6 | cut -d' ' -f1 | sort | uniq -c | sort -rn
可能であれば、「弱い」コマンドを使用することに魅力的な点があります。
Awstats トリックを実行する必要がありますが、はるかに多くの情報を提供します。これがお役に立てば幸いです...
Webalizer で実行できます。
例:
webalizer -o reports_folder -M 5 log_file
-o reports_folder
は、レポートが生成されるフォルダーを指定します-M 5
は、ブラウザ名とメジャーバージョン番号のみを表示しますlog_file
はログファイル名を指定しますユーザーエージェントを取得するには
Sudo awk -F"\"" '{print $6}' /var/log/nginx/access.log | sort | uniq -dc
そのためにシェルスクリプトを使用します。猫、awkパイプ、並べ替え、uniqが機能します