Извлечь всю строку из большого текстового файла.

У меня есть файл дампа SQL 34 ГБ

CREATE TABLE `table1`
CREATE TABLE `table6`
CREATE TABLE `table44fff`
CREATE TABLE `tablecvd`

Мне нужно быстро извлечь все имена таблиц, я думаю, должно быть что-то вроде

FOR /F "tokens=* delims=" %%A IN ('db1.sql ^| FIND "CREATE TABLE `"') DO ECHO %%A > output.txt

но я получаю ошибку, что мой файл слишком большой

Мне нужно получить список имен таблиц в выходном файле

table1
table6
table44fff
tablecvd
....

person Dmitrij Holkin    schedule 04.02.2014    source источник


Ответы (1)


Не пробовал это на таком большом файле, но как насчет следующего:

FOR /F "tokens=2 delims=`" %%A IN (
    'findstr "CREATE TABLE" db1.sql'
) DO (
    ECHO %%A >> output.txt
)

По запросу в Perl это можно сделать:

#!/usr/bin/perl
use v5.14;

open(IN, "<", "db1.sql");
open(OUT, ">>", "output.txt");

while (<IN>) {
    if(/^CREATE TABLE `(.*)`/){
        say OUT $1;
    } 
}

close(IN);
close(OUT);
person mbroshi    schedule 04.02.2014
comment
Вам нужна некоторая потоковая обработка с использованием языка, близкого к собственному коду (например, C++, Java, C#). Пакет идет медленно. - person mihai_mandis; 04.02.2014
comment
Да, mihai_mandis прав. Даже такой язык, как Perl, будет анализировать этот большой файл намного быстрее. - person mbroshi; 04.02.2014