LINUX.ORG.RU

Отпарсить *.sql файл и сохранить результат >result.txt

 , ,


1

1

Друзья я несколько раз вбивал в поиск ключевые слова в поиск, но ответа для себя так и не обнаружил.

Есть ли в UBUNTU возможность отпарсить большой (3GB) .sql файл и все найденные в нём email сохранить в result.txt Я так понял, это делается при помощи регулярного выражения ? Подскажите рабочий пример!


Ответ на: комментарий от r0ck3r

я пробовал, при импорте mysql умирает. значит ,как я понял ,если нет возможности это выполнить через консоль, решил вопрос python костылём.

#!/usr/bin/python
# -*- coding: utf8 -*-

import sys, os, os.path, random, re
from optparse import OptionParser
from lib.lib_emails_extract import *




def run_using_args():
    parser = OptionParser()
    parser.add_option("--in", dest="in_file", help="Input file", metavar="FILE")
    parser.add_option("--out", dest="out_file", help="Output file", metavar="FILE")
    (options, args) = parser.parse_args()
    if options.in_file is None or options.out_file is None:
        parser.error('options --in and --out is required')
    if options.in_file == options.out_file:
        parser.error('options --in and --out must be different!')

    op = ExtractEmailsOperation(
        in_filename = options.in_file,
        out_filename = options.out_file)
    op.do()

def run_in_folder_mode():
    files_found = 0
    files_processed = 0
    suffix = '.emails'
    if not os.path.isdir('./workdir'):
        os.mkdir('./workdir')
    for fn in os.listdir('./workdir'):
        if fn.startswith('.'): continue
        if fn.endswith(suffix): continue
        files_found += 1
        if os.path.exists('./workdir/%s' % fn + suffix):
            print 'Skip: \'%s\' (already processed)' % fn
            continue
        print 'Extracting: \'%s\' ... ' % fn,
        op = ExtractEmailsOperation(
            in_filename = './workdir/%s' % fn,
            out_filename = './workdir/%s%s' % (fn, suffix))
        op.do()
        files_processed += 1
        print 'Ok'

    if files_found <= 0:
        print 'No valid files found in \'./workdir/\''
    elif files_processed <= 0:
        print 'There is nothing to do'
    else:
        print 'Done.'


def main():
    if len(sys.argv) > 1:
        run_using_args()
    else:
        run_in_folder_mode()

if __name__ == "__main__":
    main()
ege ()
Ответ на: комментарий от r0ck3r

БД отселектит строки таблицы в которых (в определённом столбце) есть что-то подходящее под регулярное выражение. Потом всё-равно придётся выковыривать нужное.
Так не проще-ли стразу использовать grep? Вроде в sql файле не должно быть ничего постороннего похожего на email.

MrClon ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.