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

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

awkawkで指定した範囲を抜き出す

アクセスログの解析などで awk は非常に重宝します。区切り文字を指定すると、パースされた列(カラム)の値を簡単に表示することができます。しかし、表示したい列が多くなると、カラムの指定も多くなるので、ちょっとかっこ悪くなってしまう場合もあります。

そこで、例えば、カンマ区切りで 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 : 表示のフィールドセパレータ

最終更新日:

関連記事

人気記事

新着情報