概要
tsv、csvで扱われるデータやlogのフィルタリングでawkコマンドを使用することがあるので、備忘録的に使用例を残す。
awkとは
ファイルでパターンに一致する行を検出し、検出された行に対して指定されたアクションを実行する
コマンド例
カンマで区切られたファイルの指定したフィールドが指定した値より大きいものを抽出し、降順にソートする。
例では第7フィールドが150より大きいものを抽出し、第7フィールドで降順ソートしている。
awk -F "," '{if($7 > 150) print}' hoge.tsv | sort -k 7 -t "," -r
tabで区切られたファイルの指定したフィールドのみを抽出し、先頭に行数をつける
awk -F "\t" '{count++;print count,$1, $5}' hoge.tsv
tabで区切られたファイルの指定したフィールドで日時比較して抽出する
awk -F "\t" '{date = $9; if(date > "2018-08-01 14:00:00"){print}}' hoge.tsv
tabで区切られたファイルの指定したフィールドの合計値を最後に出力する
BEGIN
:最初のレコードの読み取り前に実行する
END
:最後に実行する
cat hoge.tsv | awk -F "\t" 'BEGIN{total=0}{total+=$7; print $0}END{print total}'
apacheのアクセスログをhttpステータスコードを指定して確認する
例はステータスコード200を指定(200を監視し続けるなんてほぼ無いと思うが。。。)
tail -f /var/log/apache2/access.log | awk -F " " '{if($9 == 200) print}'
最後に
awkを使わなくてもgrepなどのコマンドでも十分に対応できるものもあるが、個人的には普段から使っておかないといざ必要な時にド忘れしていることがあるので積極的に使っておきたいコマンドです。