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へ適用するのがいいと考えています。コンパイラなどでも中間表現を使うのだが、途中経過がわかるようにしておいた方が、何かうまく動作しなかったときに、追跡しやすいからです。

花見

東京へ行って花見をしてきました。結構きれいでした。

Tokyo

東京へ出張。といっても17:00からのミーティングだったので、14:00くらいに家をでました。

気になっていたパケット転送の設定ができたというメールをもらいましたが、パケットにマークをつけて、転送するという複雑な処理をしていました。単純に8443はPREROUTINGでリジェクトして、443はPREROUTINGはアクセプトし8443へ転送して、INPUTでは8443を受け入れる、とする設定を想像していたので、いろいろ方法はあるのだなぁ、と思った。

ミーティングの方は、ひとつ謝らないといけないことがあって、それについては気が重かったのですが、全体的には和やかに終わり、その仕事自体は順調だということで、安心です。

とはいえ、他の仕事もつまっていて、あまり精神的に休まらないのですが、ぼちぼちやっていこうかと思います。22:00過ぎに戻ってきましたが、思ったよりは寒くなかったので、助かりました。ちょっとだけ歩いて帰宅。

Desk

新しい机が我が家にきたので、家族で模様替え。でも、頭痛がしたのでひとりで休んでいました。

Comic

まんが本を何冊か購入しに本屋さんを4件まわりました。購入しわすれていた巻を探したのですが、出版社がなくなってしまったので、コーナーがなくなっていたり、たまたまその巻だけおいていなかったり、ということで、ほとんど手に入りませんでした。取り寄せをするか、Amazonで購入するしかないのですが、どちらも面倒そうです。どうしたものか。

Trac

結局、Mac OS X に標準でついているPythonを使うことにしました。日本語版をダウンロードしてきて python setup.py install を使ったインストールでは、Genshiのインストールで失敗します。とはいえ、Genshiのサイトからeggをダウンロードして、それをそのまま/Library/Python …. site-packaes/においてからTracをpython setup.py installでインストールすると、すんなりいれることができます。

MacPortsをやるまでにこちらでインストールに成功していたのですが、Tracへチケットなどを登録できなかったので、何か問題がおきていると勘違いしていました。認証設定をしないとチケット登録などができないようです。オンラインヘルプを確認して、.htpasswdファイルを用意してから、BASIC認証を下記のように利用する設定にしたところ、ログインができるようになり、Tracが使えるようになりました。めでたしめでたし。

tracd –hostname=localhost -p 8080 –basic-auth=projctName,/var/trac/projctName/.htpasswd,/var/trac/projctName /var/trac/projctName