LoginSignup
2
2

More than 5 years have passed since last update.

【bash】DBのバックアップから特定文字列を含んだレコードを抽出するスクリプト

Last updated at Posted at 2015-06-23

業務で必要になってスクリプトを書いたのでメモ。

条件

DB(mysql)のバックアップファイルはzipで、中身はdropとcreateのあとにデータを複数行まとめてinsertしている。このzipファイルが日付ごとに大量にある。

※ほんとにやりたかったことは、DBのデータがどこで変わったかを大量のバックアップファイルから追うこと。

スクリプト

特定文字列でgrepするだけだと、insertの後ろ全てが取れてくるので、「),(」を改行コードに置換してからgrepすることにした。
※insertの先頭と最後はきれいにレコード取れないけどそれぐらいは良しにした。

grepを二回かけているのは、いきなり置換するより対象のinsert分抽出してからの方が早いから。

特定文字列を含んだレコードとファイル名を結果ファイル(out.txt)へ出力する。

bash
target=hogehoge

LF=$(printf '\\\012_')
LF=${LF%_}

for file in `ls *.zip`;do
  echo $file >> out.txt
  zcat $file | grep $target | sed 's/),(/'"$LF"'/g' | grep $target >> out.txt
done

参考:
sedコマンドで文字列を改行に置換する、しかもスマートに置換する。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2