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
こんな感じで必要な箇所だけ抜き出して取得できる!