2009-03-16 (Fri) 確定申告 今日までっすよ
Language: ksh: TSV ファイルを読み込む
ksh でタブ区切りのファイル (TSV ファイル) を読み込んで、ごにょごにょする。えっと、、ハマりました無知な私です。。。
まずはお勉強。
ksh - Korn Shell (コーン シェル、ケー シェル)。
1980 年初期に開発される。Bourne Shell に対して完全上位互換。
B シェル系:sh, ksh, bash, zsh
C シェル系:csh, tcsh
sh - Bourne Shell (ボーン シェル、ビー シェル)。標準のシェル。
現在は sh の代りに ksh や bash、zsh が使用されるのがほとんど。
で、今回やりたいのがタブ区切りのファイルを読み込むこと。
結論から言えば、環境変数 IFS を設定するんだってさ。
IFS てのは、シェルがコマンドラインを走査するときの区切り文字のリストが格納されているもの。
$ echo -n "$IFS" | od -b 0000000 040 011 012 0000003
そのままエコーしたのではよくわからんので、上記のコマンドを打つ。先頭の「0000000」、「0000003」は入力ファイルの先頭からのオフセット番地で、その他のが設定されている文字 (8 進数)。デフォルトではスペース (040)、タブ (011)、改行 (012) が設定されているっぽい。
じゃこれにタブだけ設定すれば良いのか。これで無事解決!!
#!/usr/bin/ksh # 区切文字設定 IFS=$'\t' # TSV から読み込んで配列に格納 i=0 while read ARG1 ARG2; do FOO[$i]=$ARG1 BAR[$i]=$ARG2 let i=i+1 done < /foo/bar/hoge.tsv # 配列内容を表示してみる j=0 while (( $j < ${#FOO[*]} )); do echo ${FOO[$j]} echo ${BAR[$j]} let j=j+1 done exit 0