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

awkで指定した範囲の値を抜き出す

アクセスログの解析などで awk は非常に重宝します。

区切り文字を指定すると、パースされた列(カラム)の値を簡単に表示することができます。

しかし表示したい列が多くなると、カラムの指定も多くなるのでちょっとかっこ悪くなってしまう場合もあります。

特定の範囲だけ値をフィルタリングできないか調べてみました。

3列目から5列目までを抜き出す

例えば、カンマ区切りで 6 個の項目がある場合、3 列目から 5 列目までの文字だけ抜き出す方法はないかなっと調べてみましたが、用途に一致する方法が見つかりませんでした。

下記は、6 個のカンマで区切られた文字列から C と E だけ抜き出したい場合の例です。

$ cat saratoga.txt

A,B,C,D,E,F

$ awk -F',' '{print $3" "$5}' saratoga.txt

C D

上記のように 3 番目と 5 番目のカラムを抜き出すのは $3 や $5 を指定すればいいのですが、$3 から $5 など特定の範囲を抜き出すにはどうすればいいのでしょうか。
($3-$5 や $3:$5 などは使えません)

やはり for 文などを使ってコーディングしないといけないのかなぁ。

ちなみに $0 で全項目を出力することができるのですが、これを利用すれば最後の項目だけ表示しないなどちょっとした調整なら可能になります。

$ awk -F',' '{OFS=",";$6="";print $0}' saratoga.txt

A,B,C,D,E,
$ awk -F',' '{OFS=",";$4="";$6="";print $0}' saratoga.txt

A,B,C,,E,

組み込み変数や組み込み関数をうまく利用していけば、もっと複雑なことができそうです。

主な組み込み変数だけ書き残しておきます。NF も使う機会が多いでしょうか。

NF : 現在レコードのフィールド数
OFS : 表示のフィールドセパレータ

Web API The Good Parts

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

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

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

あなたにオススメ