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をいじるバージョンはこちら ]
※中級者向けの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をいじるバージョンはこちら ]
シェルスクリプトでcsvを扱う(bash)その2
パスワードハッシュ生成スクリプト(Solaris10)
シェルスクリプトの計算速度
シェルスクリプト(計算)
シェルスクリプト(変数の定義2)
シェルスクリプト(変数内容の表示)
パスワードハッシュ生成スクリプト(Solaris10)
シェルスクリプトの計算速度
シェルスクリプト(計算)
シェルスクリプト(変数の定義2)
シェルスクリプト(変数内容の表示)
Posted by タカさん at 12:00│Comments(0)
│ShellScript