TSVからSQL文を生成するスクリプト

UPDATEのSQL文などを、TSVから生成するスクリプトとかあると、重宝します。ということで、作りました。最近、シェルスクリプトに頼ることが多くなってきました。それだけ時間が足りないということなのか、単にEclipseを起動するのが面倒になったのか、作ったプログラムの管理をするのが嫌になったのか、いろいろと思いあたる節はありますが、まぁ、どうでもいいことです。Macですぐに試せるから、というのは環境的には大きな変化かもしれません。

!/bin/sh
fileName=$1
id0=$2

function createUpdateSql
{
  id=$1
  v=0
  if [ $# = 2 ]; then
    v=$2
  fi
  echo "UPDATE user SET c1 = $v WHERE id = $id and id0 = $id0;" >> a.sql
}

sed "s/,/    /g" $fileName > $fileName.tsv
echo "" > a.sql
while read _line ; do
  createUpdateSql $_line
done < $fileName.tsv

使い方は、下記のような感じ。fileNameにはCSVファイル名をいれる。id0はSQL文で必要なのでいれてある。複雑なCSVには対応していないし、汎用性はないけど、こういうのをテンプレートとしてもっているとそれなりに使える。

$ ./a.sh fileName id0

ちなみに、echoコマンドがMacとLinuxでは動作が違うような気がします。「-n」オプションがLinuxでないと効かない。

それから、直接mysqlやpsqlコマンドをうつという方法もあるが、個人的にはいったんSQL文のファイルに落として問題がなさそうだということを確認してから、DBへ適用するのがいいと考えています。コンパイラなどでも中間表現を使うのだが、途中経過がわかるようにしておいた方が、何かうまく動作しなかったときに、追跡しやすいからです。

同じタグの記事: bash
同じタグの記事: SQL
同じカテゴリの記事: Linux
同じカテゴリの記事: Mac
関連書籍: bash