2012年08月12日

シェルスクリプトでcsvを扱う(bash)その1

[ IFSをいじらないバージョン ]
※中級者向けのIFSをいじるバージョンは末尾にリンクあります

シェルスクリプトでcsvを扱う方法は
検索すれば何種類か出てくるが
sedコマンドを使ったり2次元配列もどきとawkコマンドを使ったりで
以外と複雑なものも少なくない
しかも各フィールドをそれぞれ別な配列に入れるのは
検索してもヒットしてくれない
ということで即席ではあるが
参考程度に作ってみたので残しておくことにする

とりあえず作った条件は以下のとおり
1 csvファイルを1行ずつ読み込む
2 各値をそれぞれ別な配列に入れる


csvファイルの内容(no.csv)
10,100
11,101
12,102
13,103
14,104
15,105


ShellScriptの内容(csv.sh)

#!/bin/bash

NO=0

#1行ずつ読み込む
while read STR
do
# 1.カンマはcutコマンドのオプション指定でフィールド区切り文字に指定
# 2.フィールドを指定して切り出す
hoge[$NO]=`echo $STR | cut -d , f 1`
huga[$NO]=`echo $STR | cut -d , f 2`
let NO++
done < no.csv

SUM=${#hoge[*]}

for((x=0; x<${SUM}; x++ ))
do
echo "第1フィールド:${hoge[$x]} 第2フィールド:${huga[$x]}"
done


まは配列に関しては
自分の好きな名前をつけた配列変数にいれてやればいい


実行結果

第1フィールド:10 第2フィールド:100
第1フィールド:11 第2フィールド:101
第1フィールド:12 第2フィールド:102
第1フィールド:13 第2フィールド:103
第1フィールド:14 第2フィールド:104
第1フィールド:15 第2フィールド:105


または
hoge[$NO]=`echo $STR | cut -d , f 1`
huga[$NO]=`echo $STR | cut -d , f 2`

もしこれが
10,100,1000
のようなcsvファイルの内容であったなら
huga[$NO]=`echo $STR | cut -d , f 2`
の下に
puga[$NO]=`echo $STR | cut -d , f 3`
のように配列を1行追加して用意すればよい

Shell Script中級者以上の方向け
[ IFSをいじるバージョンはこちら ]



同じカテゴリー(ShellScript)の記事画像
シェルスクリプト(計算)
シェルスクリプト(変数内容の表示)
同じカテゴリー(ShellScript)の記事
 シェルスクリプトでcsvを扱う(bash)その2 (2015-06-20 20:30)
 パスワードハッシュ生成スクリプト(Solaris10) (2013-09-29 14:31)
 シェルスクリプトの計算速度 (2011-09-04 18:32)
 シェルスクリプト(計算) (2010-04-17 20:47)
 シェルスクリプト(変数の定義2) (2010-04-06 20:53)
 シェルスクリプト(変数内容の表示) (2010-04-04 21:12)

上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
シェルスクリプトでcsvを扱う(bash)その1
    コメント(0)