0
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-12-24

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で一番の得意ワザ! シェルで文字列を自在に扱うための文字列関数

0
0
0

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
0
0