Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Как разбить файл на части по сепаратору (строка)  (Прочитано 1600 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Electricity

  • Автор темы
  • Активист
  • *
  • Сообщений: 250
    • Просмотр профиля
Здравствуйте.
Есть текстовый файл, размер 6G. Дамп БД в формате SQL.
Нужно его разбить на части по таблицам и сохранить каждую с именем файла = имя_таблицы.sql

Сепараторы (PostgreSQL) :
Код: (mysql) [Выделить]
INSERT INTO answer_marks VALUES (1837419923, 3, '{75989069,9741714,215585690}');
INSERT INTO answer_marks VALUES (1837419976, 3, '{2406817,46088324,216429210}');


--
-- Data for Name: answers; Type: TABLE DATA; Schema: public; Owner: -
--

INSERT INTO answers VALUES (1724461654, 170084102, 32935992, true, false, '2014-09-07 18:58:00+04', false, 0, 'может под кроватью...', '''кроват'':3');
INSERT INTO answers VALUES (1725422545, 170295059, 109580105, true, false, '2014-09-15 15:53:00+04', false, 0, 'Любить всех.', '''люб'':1');

Подскажите?
Kubuntu 18.04 amd64, Qt: 5.9.5, KDE Frameworks: 5.44.0, plasmashell 5.12.7, корпус чёрный, клава белая

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Подскажите?
Можно написать программу/скрипт на любом языке, который вы знаете. (Другой путь - сделать в любом текстовом редакторе)
Извините, я все еще учусь

Оффлайн Electricity

  • Автор темы
  • Активист
  • *
  • Сообщений: 250
    • Просмотр профиля
IFS='Data for Name'
for ofile in $(cat "$ifile"); do
        echo $ofile
done

Где ошибка?

Пользователь добавил сообщение 06 Октября 2016, 20:24:27:

Себе отвечу  ;)

while IFS= read -r line
do
    #echo "$line"

    if [[ "$line" =~ 'Data for Name' ]] ; then
        table=$(echo "$line" | sed -r 's/^.*: ([a-z_]*); Type.+$/\1/g')

        filename=${ofile}${table}.sql

        echo "$line" > "$filename" # Заголовок в файл

        echo "Записывается таблица $table в файл $(basename $filename)"
    else
        if [ -z "$filename" ]; then continue; fi

        echo "$line" >> "$filename"
    fi

done < "$ifile"
« Последнее редактирование: 06 Октября 2016, 20:57:37 от Electricity »
Kubuntu 18.04 amd64, Qt: 5.9.5, KDE Frameworks: 5.44.0, plasmashell 5.12.7, корпус чёрный, клава белая

 

Страница сгенерирована за 0.143 секунд. Запросов: 22.