技術系TIPS
PR

awkで最後から2番目のカラムの値を取得する

saratogax
記事内に商品プロモーションを含む場合があります

Apache のアクセスログを見ていたら、リクエストの処理に掛かった時間が最後から 2 番目に出力されるログ設定になっていました。

ちなみに、%T が秒で、%D がマイクロ秒となるので、用途に合わせて出力しておくと調査時に便利です。

さて、そんな処理時間を調査する作業があったのですが、残念なことに出力される場所が UserAgent よりも後なので、単純に半角スペースで区切ってしまうと何番目かがわかりにくくなります。

後ろから数えた方が早い場合は$NFを使う

そこで、NF(Number of Filed)と言う組み込み変数を使います。

これは該当レコードのフィールド数を持ってくれているので、これによって最後の項目が何番目かが分かります。

下記は nginx のアクセスログの例ですが、nginx は log_format に $request_time を定義していると、そこに処理時間を出力してくれます。

今回の場合は最後の項目でしたので、以下で一気に抜き取ります。

$ awk '{print $NF}' /var/log/nginx/access.log

0.003
0.003
0.003
0.002
0.003

後ろから2番目や3番目

これを応用して、後ろから 2 番目や 3 番目を特定してみます。

まずは 2 番目。要は最後からマイナス 1 をするという方法になります。

$ awk '{print $(NF - 1)}' /var/log/nginx/access.log

3 番目はマイナス 2 をするだけです。

$ awk '{print $(NF - 2)}' /var/log/nginx/access.log

同時に出力する場合は、こんな感じですね。

$ awk '{print $(NF - 2)" "$(NF - 1)}' /var/log/nginx/access.log
ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました