まずはfor文を使ってループ時のindex値を表示
コマンド
for i in {1..3}; do echo $i; done
結果
1
2
3
次に、複数ファイルの最後の行を部分的に出力
以下のような3つのインスタンスのログファイルがあったと仮定。
instance1.log
2021-03-07 18:14:52.824 INFO 200 OK
2021-03-07 18:14:52.827 ERROR 500 Internal Server Error
2021-03-07 18:14:52.856 INFO 200 OK
instance2.log
2021-03-07 18:14:52.824 INFO 200 OK
2021-03-07 18:14:52.827 ERROR 500 Internal Server Error
2021-03-07 18:14:52.856 INFO 200 OK
instance3.log
2021-03-07 18:14:52.777 INFO 200 OK
2021-03-07 18:14:52.807 INFO 200 OK
2021-03-07 18:14:52.828 ERROR 500 Internal Server Error
各ファイルの最終行の時刻、ログレベル、ステータスコードを出力する。
コマンド
for i in {1..3}; do awk 'END{print FILENAME " " $2 " " $3 " " $4}' instance$i.log; done
結果
instance1.log 18:14:52.856 INFO 200
instance2.log 18:14:52.825 INFO 200
instance3.log 18:14:52.828 ERROR 500
for i in {1..3}; で1から3までループさせる
awk ‘END{print FILENAME ” ” $2 ” ” $3 ” ” $4}の部分で最終行に対して、ファイル名とスペース区切りで2番目と3番目と4番目を出力する。ENDとFILENAMEはawkに用意されている組み込み変数。
instance$i.log の部分でループ時のindex値を使ってファイル名を指定
コメントを残す