久しぶりにXOOPSについて調べた。
「bash」タグアーカイブ
ファイルローテート
ファイル名をローテートするプログラムがほしいときがあります。 続きを読む
TSVからSQL文を生成するスクリプト
UPDATEのSQL文などを、TSVから生成するスクリプトとかあると、重宝します。ということで、作りました。最近、シェルスクリプトに頼ることが多くなってきました。それだけ時間が足りないということなのか、単にEclipseを起動するのが面倒になったのか、作ったプログラムの管理をするのが嫌になったのか、いろいろと思いあたる節はありますが、まぁ、どうでもいいことです。Macですぐに試せるから、というのは環境的には大きな変化かもしれません。
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には対応していないし、汎用性はないけど、こういうのをテンプレートとしてもっているとそれなりに使える。
ちなみに、echoコマンドがMacとLinuxでは動作が違うような気がします。「-n」オプションがLinuxでないと効かない。
それから、直接mysqlやpsqlコマンドをうつという方法もあるが、個人的にはいったんSQL文のファイルに落として問題がなさそうだということを確認してから、DBへ適用するのがいいと考えています。コンパイラなどでも中間表現を使うのだが、途中経過がわかるようにしておいた方が、何かうまく動作しなかったときに、追跡しやすいからです。