[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
一旦スペースをアンダーバーに置換してから、アンダーバーを区切り文字にすることで解決。
もっとスマートなやり方があったら教えてください!><

トラックバック(0)

このブログ記事を参照しているブログ一覧: [awk] スペースとTABが混在しているテキストのフィールド区切り

このブログ記事に対するトラックバックURL: http://www.blogcube.info/cgi-bin/mt-tb.cgi/162

カスタム検索

カレンダー



このブログ記事について

このページは、(っ´∀`)っ ゃーが2010年6月15日 02:53に書いたブログ記事です。

ひとつ前のブログ記事は「[bash]2010/05/22 講師をやります」です。

次のブログ記事は「[One Liner] 140字におさまらなかったメモリ開放.sh」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01