[Linux grep, sort]ログから数値が大きい順に並べて表示する

記事内に広告が含まれています。

ログ解析でかかった処理にかかった時間を大きい順に並べる必要があったので,具体的なコマンドをメモします.

使ったデータの例

テストとして以下のようなものを使います.やりたいことは 処理 XXX1  だけ抽出して大きい順に並べるということです.

//日付 時間 処理名 かかった時間[ms]
2023-11-01 08:00:00 XXX1 3000[ms]
2023-11-01 09:00:00 XXX1 10000[ms]
2023-11-01 09:30:00 XXX3 100[ms]
2023-11-01 10:00:00 XXX4 5000[ms]
2023-11-01 11:00:00 XXX5 8000[ms]
2023-11-01 11:01:00 XXX1 20000[ms]
2023-11-01 09:02:00 XXX6 10000[ms]
2023-11-01 12:30:00 XXX7 100[ms]
2023-11-01 14:00:00 XXX4 2000[ms]
2023-11-01 15:00:00 XXX1 40000[ms]

結論

以下のコマンドを実装しました.

grep XXX1 log |sed -e 's/\[ms\]//g' | cut -d " " -f4 | sort -nr
//出力結果
40000
20000
10000
3000

grep

grepコマンドは指定した文字列を含む行だけ抽出するコマンドです.

このコマンドにより,XXX1, XXX2, …など複数の処理が混在している中からXXX1だけ取り出すことができます.

grep XXX1 log                      
2023-11-01 08:00:00 XXX1 3000[ms]
2023-11-01 09:00:00 XXX1 10000[ms]
2023-11-01 11:01:00 XXX1 20000[ms]
2023-11-01 15:00:00 XXX1 40000[ms]

sed

正規表現にマッチする文字列を削除するために使いました.

今回はかかった時間の数字だけが欲しかったため,[ms]を削除する処理を実行しています.

grep XXX1 log |sed -e 's/\[ms\]//g'                  
2023-11-01 08:00:00 XXX1 3000
2023-11-01 09:00:00 XXX1 10000
2023-11-01 11:01:00 XXX1 20000
2023-11-01 15:00:00 XXX1 40000

cut

かかった時間だけを抽出するためのコマンドです.

今回は区切り文字が空白区切りで分けた際の4個目の文字列がかかった時間でした.そのため,-dオプションで空白を,-fコマンドで何番目を取り出すか指定しています.

オプション意味
-d区切り文字を指定
-f区ぎったうちの何番目を取り出すか
grep XXX1 log |sed -e 's/\[ms\]//g' | cut -d " " -f4           
3000
10000
20000
40000

sort

取得した値を並び替えるコマンドです.注意として,-nオプションを指定しないと左側の文字が小さい順に並べられてしまいます.

grep XXX1 log |sed -e 's/\[ms\]//g' | cut -d " " -f4 | sort    
10000
20000
3000
40000
//-nオプションを指定しないと順番が変になる

まとめ

linuxのコマンドを使ってログ解析する作業があったので備忘録として残しました.

参考になれば幸いです.

Linux
スポンサーリンク