ログファイルの加工

せっかく便利なコマンドを教えて頂いたのでメモ。

"アクセスログの中で 特定のファイルにアクセスしてきた人をカウントして、多い順番に並べて表示する"

grep hogehoge.html ./access_log | perl -nle '@arr = split /\s+/, $_, 12; print $arr[11]' | sort | uniq -c | sort -nr | less

grep hogehoge.html ./access_log

./access_log の 中から hogehoge.html が含まれている行を抜き出す
その出力をパイプで次のコマンドへ渡す

perl -nle '@arr = split /\s+/, $_, 12; print $arr[11]'

eオプション コマンドライン中の一行をスクリプトとして解釈させる
lオプション 出力の最後に改行を入れる
nオプション 繰り返し実行

  • @arr = split /\s+/, $_, 12;

スペース(\s)区切りの文を12個に分割(split)し、配列(@arr=)に入れる;

  • print $arr[11]

配列を出力
この出力をパイプで次のコマンドへ渡す

sort | uniq -c | sort -nr | less

  • sort 一度ソートする?
  • uniq -c

cオプション 重複した行をカウント

  • sort -nr

nオプション 先頭の数字を数値とみなしてソートする
rオプション 逆順にソートする

  • less lessで閲覧するように渡す