У меня есть большой (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