WindowsのTSVファイルからLinuxを使ってSQL文を生成するには

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については下記が参考になります。

同じタグの記事: AWK
同じタグの記事: bash
同じタグの記事: iconv
同じタグの記事: Linux
同じタグの記事: sed
同じカテゴリの記事: Program
関連書籍: AWK
関連書籍: bash