馬とテニスのIT革命
馬とテニスとリラックマが好きな IT 系のエンジニアです。
シェル

awkで最後から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
Web API The Good Parts

オライリーの「Web API」に特化した本です。最近の多くの Web サービスは API が活用されていますが、その技術はこれまでの Web サイトとそれほど大きく変わりません。

今後、マイクロサービス化が進む中で知っておいて損はない内容が詰め込まれており、現場のエンジニアやこれから Web 系のエンジニアを目指す人にもオススメの一冊です。

created by Rinker
¥2,376
(2018/10/19 13:59:11時点 Amazon調べ-詳細)

あなたにオススメ