awk vs mysqldump
Произошла ситуация, когда пришлось вытащить из 55 Гб файла дампа всех бд - только дамп одной бд.
И получилось сделать это благодаря утилите awk, вернее как я понял ее новой версии gawk.
Суть утилиты awk:
- пробегает по строкам указанного дамп-файла
- применяет к каждой строке то, что написано в скрип-файле
- во время пробега - значение каждой строки помещается в переменную $0
- во время пробега - каждое слово помещается в переменную с номером слова, например $1, $2 ....$n
Вот мой скрипт, который:
- при начале работы awk устанавливает переменную allow_write = 0
- если строка совпадает с значением "USE 'MySuperDbName';" то устанавливает переменную allow_write = 1
- если allow_write = 1, то awk записывает строку в файл "/var/tmp/awkNewDump.sql"
- если allow_write = 1 и первое слово == "CREATE" и второе слово == "DATABASE", то awk завершает работу
Файл separate-dump.awk
#!/usr/bin/gawk -f
BEGIN {
allow_write = 0
}
{
if ($0 == "USE `MySuperDbName`;") {
allow_write = 1
}
if (allow_write == 1 && $1 == "CREATE" && $2 == "DATABASE") {
exit 0;
}
if(allow_write == 1){
print $0 >> "/var/tmp/awkNewDump.sql";
}
}
Запускается так:
shell> ./separate-dump.awk < dump.sql
Удачки.
Источники: 1 - 2
11.06.2015 17:16
Комментарии
Комментариев пока нет.