unix系でaccesslogのデータを解析したい


unixコマンドのメモ

追記:今回awkを使って日付の期間を絞り込んでいますが、newerをつかっても可能です。
unix系でファイルの数、容量を知りたい:1.ファイル生成時刻の期間で抽出したい
参照
これでやってもいいと思います!この場合は

ls -la `find . -type f -newermt "2015-10-01" ! -newermt "2015-11-01"`

で期間の取得はできますね。

Apacheのaccesslogのある期間から、ある条件の行だけを取得したい。
また、ファイルはすでにbz2で圧縮されている
っていうような状態の時に実行したコマンド。

-rw-r--r-- 1 tago tago  1021404 8月 31 00:00 acct.1446163200.bz2

上記みたいな状態でaccesslogがあるとする。
8月分を全部取得したいけど、日本語が入ってるとうまくできない。そんな時は
環境言語をデフォルトにして、'Oct'でひっかけちゃう。
不要な年が入ってきちゃうならば年を取り除く egrep -v '**' とかを使って絞り込む。

$LANG=C ls -la *acc* | egrep 'Oct'

上記訂正!(20151224 訂正)
上の状態だと、たまたまうまくいくけど'Oct'っていう文字でもひっかかってしまうので、awkを使って絞りこむように変更します。

LANG=C ls -la *acc* | awk '$6 ~ /Oct/'

ファイルリストの取得はできたけど、これを展開しないことには中身のgrepはかけれない。

bzcat `LANG=C ls -la *acc* | awk '$6 ~ /Oct/'| awk '{print $9}'` 

awkを使ってファイル名を取得し、bz2を展開するbzcatを使う。
そしてファイルの中身のフィルター文言をgrepで抽出する。

bzcat `LANG=C ls -la *acc* |awk '$6 ~ /Oct/'| awk '{print $9}'` | egrep 'test1|test2' > log.txt

こんな感じで必要な箇所だけ抜き出して取得できる!

参考URL
AWKで一番の得意ワザ! シェルで文字列を自在に扱うための文字列関数