awkにおける空白やタブの扱いと問題
- awkでは連続する空白やタブは1つのフィールドとして扱われる。
- 本来なんの問題もなく、これによりデータが扱いやすいのだが、空白が含まれるフィールドをそのまま抽出しようとした際にハマったのでメモ。
- 具体的には、以下のようなデータについて、空白フィールドが含まれる列を指定して抽出すると、空白フォールドの次のフィールドのデータが出力され、空白をそのまま出すことはできない。
$ cat aaa.txt
aaa bbb ccc
ddd fff
ggg hhh iii
$ cat aaa.txt | awk '{print $2}'
$ bbb
fff
hhh
解決策
- 一度タブを他の文字に変換して、デリミタとして指定する方法がある。
$ cat aaa.txt
aaa bbb ccc
ddd fff
ggg hhh iii
$ cat aaa.txt | tr "¥t" "," | awk -F ',' {print $2}
$ bbb
hhh
もっと良い解決策あるはず
上記はまあ、スマートではない。
ググってもいい方法全然でてこないので、そもそもawkの使い方として間違ってるのかも。。
備忘録として。
参考
AWKのこういう時はどう書く?(本稿には活かされてないのですが、awkで悩むかゆいところに手が届くめちゃめちゃ参考になった)
awkコマンドの基本