行数の多いログファイルをcatする時に便利だったのでまとめました。
##スペース区切りのログファイルでawk
適当にログファイルを作ります。
test.log
2017-08-30 20:00:00 id : 1 status : success
2017-08-30 21:00:00 id : 2 status : success
2017-08-30 22:00:00 id : 3 status : error
###普通のcatと同じように表示
$ cat test.log | awk '{print $0}'
2017-08-30 20:00:00 id : 1 status : success
2017-08-30 21:00:00 id : 2 status : success
2017-08-30 22:00:00 id : 3 status : error
###idとstatusを表示(列の操作)
$ cat test.log | awk '{print $5, $8}'`
1 success
2 success
3 error
スペース区切りで数えた番号の列を表示できます($0は1行全部)
###errorの行だけ取得(行の操作)
$ cat test.log | awk '/error/{print $0}'`
2017-08-30 22:00:00 id : 3 status : error
awk '/検索したい文字列/{print}' で行を絞ることができます
###errorの行だけ かつ idのみ取得
$ cat test.log | awk '/error/{print $5}'`
3
行と列の操作で errorの含まれる行 かつ idのみ表示することができます
##カンマ区切りのログファイルでawk
適当にログファイルを作ります。
test2.log
2017-08-30,20:00:00,id,:,1,status,:,success
2017-08-30,21:00:00,id,:,2,status,:,success
2017-08-30,22:00:00,id,:,3,status,:,error
- idとstatusを取得(セパレータ指定)
$ cat test2.log | awk -F "," '{print $5, $8}'`
1 success
2 success
3 error
-F の指定でセパレータを指定できます(デフォルトはスペース)
#まとめ
awkは行と列の操作ができる
awk `{print $1}` => スペース区切りで1列目を取得
awk `{print $1, $2}` => スペース区切りで1列目と2列目を取得
awk `/error/{print $0}` => 文字列'error'を含む行を取得
awk `/error/{print $1, $2}` => 文字列'error'を含む行の1列目と2列目を取得
awk -F "," `{print $0}` => 区切り文字を","に設定することもできる
以上、基本だけですが使えると便利そうです。