シェル/MySQLにtsvデータをロードする
関連
- sh
- 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/
こうするとわーっとなります。
参考
- http://blog.hansode.org/archives/51481467.html
- http://blog.livedoor.jp/akf0/archives/51638961.html
- http://www.atmarkit.co.jp/flinux/rensai/linuxtips/437delfileext.html
作成日 2013-08-17
