- blogs:
- cles::blog
2013/05/17
bash でタブ区切りテキストを処理する
sh以前に「変数展開で簡単なcsvを処理する」というのを書いたので、これと同じ方法でも TSV の処理ができるのですが、今日は違う方法で TSV 処理する方法を見つけたのでメモ。
bash では変数で配列を扱うことができるのは、これも以前やった「パイプでつないだコマンドの終了ステータスをとる」で明らかになっていますが、配列のデリミタは IFS という変数を使って変更することができます。つまり、 IFS にタブを入れておけば TSV のデータ1つ1つを配列に読み込むことができます。
例えば下記のような感じ。
tsv.sh
#!/bin/bash
i=0
cat 'data.txt' | while read LINE ; do
IFS="$(echo -e '\t' )"
LINE=($LINE)
unset IFS
for j in `seq 0 $(( ${#LINE[@]} - 1))`; do
echo "$i,$j: ${LINE[$j]}"
done
i=$(($i+1))
done
これに下記のような TSV を読み込ませます。
data.txt
a1 a2 a3
b1 b2 b3
c1 c2 c3
ちょっと for がトリッキーですが、こんな感じで1カラムずつ処理できているのが分かると思います。
$ bash tsv.sh
0,0: a1
0,1: a2
0,2: a3
1,0: b1
1,1: b2
1,2: b3
2,0: c1
2,1: c2
2,2: c3
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5807
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
- シャープの空気清浄加湿器の... (1)
- SMARTEK デジタル温湿度計 (1)
閲覧数が多いエントリ
1 . NP_TrackBack v2.x系の使い方(16598)
2 . Word で数式がグレーアウトされていて挿入できないときは(15318)
3 . awk で指定した n カラム目以降を出力する(11814)
4 . アーロンチェアのポスチャーフィットを修理(11647)
5 . Windows 10 で勝手にログアウトされないようにする(9820)
2 . Word で数式がグレーアウトされていて挿入できないときは(15318)
3 . awk で指定した n カラム目以降を出力する(11814)
4 . アーロンチェアのポスチャーフィットを修理(11647)
5 . Windows 10 で勝手にログアウトされないようにする(9820)
cles::blogについて
Referrers