HAYDAY!

忘れやすいポンコツ人間。学んだこと、日々感じたこと、備忘録用ブログ

シェルスクリプトでファイルを読み込んで1000行ごとに文字を挿入する

開発をしていた際に、DBの更新が必要となった際のメモです!

条件や更新内容がそれぞれ違うUPDATE文を40万件流し込みする必要があった際に 実行中ずっとトランザクションをはってしまうと、アプリに支障が出てしまうため 1000行ごとにコミットすることになりました。

よし、とりあえず、1000行ごとに「commit;」って書いとくか!と思って、作業しようと思ったのですが まあ面倒だとおもって、シェルスクリプト作って、やったほうが早いし確実ってことで、急いで作ったものを、忘れないようにメモしておきます。 すぐ忘れるので・・

やりたいこと

・ファイル名を引数で渡して、1行ずつ読み込む

・1000行ごとに「commit;」という行を挿入する

コード

#!/bin/sh

cnt=0
filename=$1

while read line
do
  cnt=`expr $cnt + 1`

  if [ `expr $cnt % 1000` == 0 ]; then
    echo "commit;" >> "./${filename}.sql"
    echo $line >> "./${filename}.sql"
  else
    echo $line >> "./${filename}.sql"
  fi

done < ${filename}

echo 'finish!!'

実行

例えば、「sqlfile.sql」というファイルに文字を挿入していきたいときは、こんな感じで呼びます。

$test.sh sqlfile.sql

結果

同じディレクトリに「sqlfile.sql.sql」というファイルが作られます。(変なファイル名ですみません。。)

さいごに

あまり使う機会はないかもしれないですが、sqlファイルはなくても、テキストファイルでもなんでも代替できるので、もし機会があれば参考にしていただければと思います!

以上!