LoginSignup
1
1

More than 5 years have passed since last update.

複数ログファイルをgrepしてマッチした行数を出力するシェルスクリプト

Posted at

下記のようなことをしたいとき、ありますよねー。

  • エラーログから特定のエラーが何回発生したか知りたい
  • アクセスログから特定のページへのアクセス数を知りたい

複数ファイルをgrepしてマッチした行数をファイル毎に出力するシェルスクリプトです。
※ログなど圧縮済ファイルを想定してるのでzgrep。

複数ログファイルをgrepしてマッチした行数を出力

# 検索したい文字列
grep_words=()
grep_words[0]="Warning"
grep_words[1]="Notice"

# grep対象のファイル名を宣言
target_files=()
target_files[0]="error_log-20170101.gz"
target_files[1]="error_log-20170102.gz"
target_files[2]="error_log-20170103.gz"

# 検索文字列でループ
for grep_word in ${grep_words[@]}; do
    # 出力ファイルを空に(2回実行した場合に追記しないように)
    echo -n > tmp/grep_${grep_word}.txt
    # grep対象のファイル名でループ
    for target_file in ${target_files[@]}; do
        # 実行コマンドをコンソールに出力したうえで実行。ログに追記。
        echo "zgrep -c \"${grep_word}\" ${target_file}"
        hit_count=`zgrep -c "${grep_word}" ${target_file}`
        echo "${grep_word} ${target_file} ${hit_count}" >> tmp/grep_${grep_word}.txt
    done
done

出力結果はこんな感じ。

tmp/grep_Warning.txt
Warning error_log-20170101.gz 24
Warning error_log-20170102.gz 35
Warning error_log-20170103.gz 103
tmp/grep_Notice.txt
Notice error_log-20170101.gz 235
Notice error_log-20170102.gz 321
Notice error_log-20170103.gz 513

適宜書き換えてもらえればいろいろ使えるかと。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1