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

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

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

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

最終更新日:

関連記事

人気記事

新着情報