Есть дамп базы, хочу сделать нарезку на таблицы и параллельную заливку таблиц в базу. Делаю через awk - в принципе, рабочий вариант написал, но в процессе написания вылезли непонятные для меня вещи. Итак:
Тест 1:
root@server1:~/test/21# cat /etc/fstab | awk 'BEGIN {n=0}; /sda/{n+=1}; {print > n}'
root@server1:~/test/21# ls -lA
итого 16
-rw-r----- 1 root root 306 Фев 22 03:19 0
-rw-r----- 1 root root 34 Фев 22 03:19 1
-rw-r----- 1 root root 33 Фев 22 03:19 2
-rw-r----- 1 root root 64 Фев 22 03:19 3
Теперь берем дамп, проделываем то же самое с ним:
root@server1:~/test/21# pbunzip2 -c ../../file.sql.bz2 | gawk 'BEGIN {n=0}; /DROP TABLE IF EXIST/{n+=1}; {print > n}'
*Control-C or similar caught, quitting...
pbzip2: *WARNING: Deletion of output file (apparently) failed.
root@server1:~/test/21# ls -l
итого 542268
-rw-r----- 1 root root 0 Фев 22 03:21 0
-rw-r----- 1 root root 4096 Фев 22 03:21 1
-rw-r----- 1 root root 0 Фев 22 03:21 10
-rw-r----- 1 root root 0 Фев 22 03:21 11
-rw-r----- 1 root root 0 Фев 22 03:21 12
-rw-r----- 1 root root 0 Фев 22 03:21 13
-rw-r----- 1 root root 4096 Фев 22 03:21 14
-rw-r----- 1 root root 20480 Фев 22 03:21 15
-rw-r----- 1 root root 10956800 Фев 22 03:21 16
******
Часть файлов получается нулевого размера. Ок, посмотрим, что происходит в awk'e:
root@server1:~/test/21# bunzip2 -c ../../file.sql.bz2 | gawk 'BEGIN {n=0}; /DROP TABLE IF EXIST/{n+=1}; {print n, $0}' | head
0 -- MySQL dump 10.13 Distrib 5.5.20, for Linux (x86_64)
0 --
0 -- Host: localhost Database: database
0 -- ------------------------------------------------------
и так далее
т.е., вроде как все ок должно быть во 2-м тесте, но не работает. Ок, сделаем костыль:
root@server1:~/test/21# bunzip2 -c ../../file.sql.bz2 | gawk 'BEGIN {n=0}; /DROP TABLE IF EXIST/{n+=1}; {print | "cat >"n}'
root@server1:~/test/21# ls -l
итого 51760
-rw-r----- 1 root root 784 Фев 22 03:26 0
-rw-r----- 1 root root 4111 Фев 22 03:26 1
-rw-r----- 1 root root 972 Фев 22 03:26 10
-rw-r----- 1 root root 737 Фев 22 03:26 11
-rw-r----- 1 root root 2320 Фев 22 03:26 12
*********
Так работает, в «0» получаем заголовок таблицы, в остальных файлах - сами таблицы. Такой вариант пока и использую, но хотелось бы mawk.
Пробую любой вариант с mawk - получаю некоторые пустые файлы на выходе как во 2-м тесте.
Почему так происходит?
И да, зачем mawk:
pbunzip2 -c ../../file.sql.bz2 | pv -cN pregawk | gawk '{print}' | pv -cN out > file
pregawk: 1,38GB 0:00:11 [ 183MB/s]
pbunzip2 -c ../../file.sql.bz2 | pv -cN pregawk | gawk '//{print}' | pv -cN out > file
pregawk: 61,3MB 0:00:06 [24,5MB/s]
А вот mawk в любом варианте:
pbunzip2 -c ../../file.sql.bz2 | pv -cN pregawk | mawk '//{print}' | pv -cN out > file
pregawk: 782MB 0:00:11 [ 237MB/s]