Linux
awk
UNIX

awkコマンドを使ってログファイルを見やすくした

行数の多いログファイルを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}` => 区切り文字を","に設定することもできる

以上、基本だけですが使えると便利そうです。