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

awkのコマンド内でシェル変数を使う方法

アクセスログから特定のレスポンスステータスを抜き出す簡易的なスクリプトを作っていたのですが、awk の中でシェル変数を使う機会があったので備忘録として残しておきます。

今まで使う機会なかったのですが少しハマりました。

シングルクォートの使い方がポイント

結果としては、awk はシングルクォートに囲まれたところを解析しようとするので、シェル変数の部分はシングルクォートから外してあげればシェル変数として扱ってくれるということです。

awk 内でステータスコードの値を持ったシェル変数をそのまま定義すると、下記の通り解釈できずに syntax error が出ます。

awk: ($8 == ${s}){print $0}
awk:         ^ syntax error
awk: ($8 == ${s}){print $0}
awk:             ^ syntax error

よって、下記のように awk コマンド内の ${s} のシェル変数をシングルクォートで囲んであげます。

#!/bin/sh

HTTP_STATUS="403 404 500"

for s in ${HTTP_STATUS}; do
    echo ${s};
    awk '($9 == '${s}'){print $0}' /var/log/nginx/access.log
done

exit 0;
Web API The Good Parts

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

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

created by Rinker
¥2,376
(2018/10/15 13:40:38時点 Amazon調べ-詳細)

あなたにオススメ