- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- シェル/MySQLにtsvデータをロードする へ行く。
- 1 (2011-10-07 (金) 02:43:11)
- 2 (2011-10-07 (金) 02:43:59)
関連†
- シェル
- MySQL
概要†
テストでデータをこちょこちょ触るのが面倒だったので作りました。
要件は以下。
- データはtsvファイル
- 該当テーブルのレコードを全削除してデータをロードする
制限事項は以下。
- データはひとつのディレクトリにまとめて置く
- データのファイル名は「*.dat」
方法†
- reset.sh
#!/bin/sh directory=`./abstpath.sh $1` if [ ! -d ${directory} ] then echo "the directory does not exist." exit fi files=`find ${directory} -maxdepth 1 -name "*.dat"` for file in ${files} do table=`basename ${file} .dat` mysql -u<ユーザ> -p<パスワード> <データベース> -e "DELETE FROM ${table};" mysql -u<ユーザ> -p<パスワード> <データベース> -e "LOAD DATA LOCAL INFILE '${file}' INTO TABLE ${table} FIELDS TERMINATED BY '\t';" echo "${table} < ${file}" done
- abstpath.sh
#!/bin/sh echo $(cd $(dirname $0) && pwd)/$1
解説†
┣ reset.sh ┗ data/ ┣ hoge.dat ┗ moge.dat
こんなディレクトリ構成になっているとして、
$ ./reset.sh data/
こうするとわーっとなります。