例えば、こんな感じに一つのCSVファイルに一年間のデータが入っているとします。
それを下図みたいに、複数年をまとめて一つのCSVにしたい時もありますよね。たぶん。

dataディレクトリ下に1996.csv,1997.csv…の形式でデータがあるとしています。
#!/bin/sh
min_year=1996
#ヘッダを書き込む
printf "#data"
for i in `seq $min_year $1`
do
printf ",$i"
done
echo #改行
for line in `cat data/$1.csv`
do
#先頭の要素
com=$(echo "$line" | cut -f1 -d",")
printf "$com"
for i in `seq $min_year $1`
do
#二番目の要素
h=$(grep "^$com," data/$i.csv | cut -f2 -d",")
#要素が無い場合
if [ -z "$h" ]; then
printf ",0"
else
printf ",$h"
fi
done
echo
done
CSVの一番目の要素をキーにgrepで各年のCSVを検索。存在しなければ0としてます。
重要なのはcutコマンド(IT pro シェル・スクリプト・リファレンス)で,これでCSVの要素が切り出せてます。
キー毎に毎回検索しているので、無茶苦茶に非効率です。
ただ、30分程度でこれを作った事を考えると、妥当なトレードオフかなぁとも。
シェルスクリプトマジ便利

0 件のコメント:
コメントを投稿