разделение дампа MySQL с помощью awk

разделение дампа MySQL с помощью awk

У меня есть большой (250G) файл дампа MySQL, из которого мне нужна только одна база данных. Я надеялся использоватьawkчтобы разделить файл, поэтому я провел небольшой поиск инайденныйэто выражение:

awk '/START/{x="F"++i;}{print > x;}' file2

Кажется, это хорошее начало (и оно отлично работает с использованием их файла-образца), но запустим его так:

awk '/CREATE DATABASE/{x="F"++i;}{print > x;}' file2

выдает мне такие ошибки:

awk: (FILENAME=dump_all.sql FNR=1) fatal: expression for `>' redirection has null string value

На других страницах (с SE) сообщается, что это происходит из-за попадания на пустую строку.

Я бы с удовольствием использовал эту технику, чтобы получить нужную мне часть из этого файла, но мои знанияawkСинтаксис (очевидно) весьма ограничен. Есть ли способ заставить это работать?

решение1

Я не знаю, решит ли это вашу реальную проблему. Поскольку вы не показали нам фактический входной файл, я понятия не имею, сработает ли то, что вы пытаетесь сделать. В любом случае, чтобы исправить ошибку, которую вы получаете, используйте это:

awk '/CREATE DATABASE/{x="F"++i;}(x){print > x;}' file2

Это изменяет скрипт так, чтобы он пытался печатать в файл только xесли переменная xустановлена. Ошибка, которую вы получали, была из-за того, что он пытался печатать все строки, некоторые из которых, по-видимому, находятся перед CREATE DATABASEстрокой, в которой xбыла неустановлена ​​переменная. Скрипт выше эквивалентен записи:

awk '{
      if(/CREATE DATABASE/){i=i+1; x="F"i;}
      if(x!=NULL){print > x }
     }' file2  

Связанный контент