[awk] スペースとTABが混在しているテキストのフィールド区切り
スペースとTABが混在しているテキストにおいて、普通にawkで区切ると、両方とも区切り文字として認識されます。しかし、「スペースかTABのどちらか」を区切り文字にしたい場合は、次のようにします。
【サンプルのテキスト】
sh-3.2$ cat hoge
1 2 3 4 5 6
ちょっとわかりにくいので、スペースをアンダーバーに置換してみます。
sh-3.2$ cat hoge | sed -e s/ /_/g
1_2 3_4_5 6
つまり、テキストファイル「hoge」は、2列目と3列目、5列目と6列目の間がTABで区切られている状態です。
【TABを区切り文字にする】
sh-3.2$ cat hoge | awk ‘BEGIN {FS=”t”}{print $2}’
3 4 5
【スペースを区切り文字にする】
sh-3.2$ cat hoge | tr ” ” _ | awk ‘BEGIN {FS=”_”}{print $1,$2}’
1 2 3
sh-3.2$ cat hoge | tr ” ” _ | awk ‘BEGIN {FS=”_”}{print $1″t”$2}’
1 2 3
sh-3.2$ cat hoge | tr ” ” _ | awk ‘BEGIN {FS=”_”}{print $2}’
2 3
かなり力ワザですがw
一旦スペースをアンダーバーに置換してから、アンダーバーを区切り文字にすることで解決。
もっとスマートなやり方があったら教えてください!><