感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

bashでカンマ区切りのファイルを読み込み、変数を設定する。

<スポンサーリンク>

以下のようなCSVファイルを読み込み、中の値を使いたいときはどうするか。
適当な「hoge.csv」を作ってみる。

hoge,fuga,foo,bar
#comment
var,boo,yahoo,yahhhh
#comment2

このサンプルは意味不明な言葉をカンマ区切りで羅列しているだけだが、CSVに意味を持たせて、一区切り目はディレクトリ名、二区切り目はファイル名、などとすることもできる。

で、このようなファイルから値を取り出し、シェルスクリプト内で活用したいときはどうするかというと、
for文とcutを組み合わせれば簡単に実現できる。
順番に見ていこう。

まず、ファイルを1行ずつ読み込んでみる

#!/bin/sh

csvfile=hoge.csv
for line in `cat ${csvfile} | grep -v ^#`
do
  echo ${line}
done

これを実行すると、結果はこうなる。

hoge,fuga,foo,bar
var,boo,yahoo,yahhhh

気付いた人もいるかもしれないが、

grep -v ^#`

とすることで、ファイルの「#」がつくコメント行を除いたものが表示されている。
さて、これでファイルの1行1行を取り出すことができたので、中のカンマ区切りの値を利用してみよう。
カンマ区切りのテキストファイルの値を利用するサンプルは・・・

#!/bin/sh

csvfile=hoge.csv
for line in `cat ${csvfile} | grep -v ^#`
do
  first=`echo ${line} | cut -d ',' -f 1`
  second=`echo ${line} | cut -d ',' -f 2`
  third=`echo ${line} | cut -d ',' -f 3`
  fourth=`echo ${line} | cut -d ',' -f 4`

  echo "1区切り目は:${first}"
  echo "2区切り目は:${second}"
  echo "3区切り目は:${third}"
  echo "4区切り目は:${fourth}"
  echo "----行終わりっ!-------"
done

これを実行した結果は以下のようになる。

1区切り目は:hoge
2区切り目は:fuga
3区切り目は:foo
4区切り目は:bar
----行終わりっ!-------
1区切り目は:var
2区切り目は:boo
3区切り目は:yahoo
4区切り目は:yahhhh
----行終わりっ!-------

うまいことカンマ区切りのファイルを読み込むことができました。