WindowsのTSVファイルからLinuxを使ってSQL文を生成したくなるときがあります。load dataとか使ってもいいのですが、やはり中間表現としてSQLに落とせると安心しませんか。もちろん、間にいろいろな変換処理をかませたいときもありますしね。
table.tsvはExcelなどからファイル保存でテキスト形式で保存したものを想定しています。たとえば下記。これをtable.tsvとします。
2 abc2 1 abc1 3 abc3
次のbashスクリプトで、このファイルを読み込んで、文字コードをiconvで変換して、trで改行コードの調整をして、sortで並び替え、uniqで重複排除をしています。最後にawkでSQL文生成をしてupdate.sqlというファイルへ保存できます。createsql.shという名前で用意したとします。
#!/bin/sh $f="table.tsv" if [ -e ${f} ]; then iconv -f Windows-31J -t UTF-8 ${f} | \ tr -d '\r'| tr -d '^\t' | sort | uniq | \ awk -f createsql.awk - > update.sql fi
createsql.awk は次のようにします。createsql.shと同じディレクトリに置きます。sample_tableのsample_codeがある値となるsample_col1のカラム値を更新するSQLを生成しています。シングルクォートを含む文字列を生成する方法が結構面倒なのでプログラムはファイルに書いてあります。
{ printf("UPDATE sample_table SET sample_col1='%s' where sample_code='%s';\n", $2, $1); }
実行は次のようにします。
$ ./createsql.sh
sed、awk、bashについては下記が参考になります。