2011-01-20 4 views
2

Мне нужно взять файл журнала linux и ввести данные в таблицу mysql и разделить каждое поле на столбцы. Я пытаюсь использовать команду LOAD DATA INFILE. Проблема только в том, что данные не ограничены, и я не могу TERMINATE FIELDS BY '', потому что файл содержит пробелы в сообщении журнала. Если у кого есть какие-либо идеи, пожалуйста, дайте мне знатьВход в файл журнала LOG в MySQL с использованием Python

Пример файла:

2011-01-17 10:18:20 Пользователь хххххх просил резервную ххххх (ххххх)

2011-01-17 10 : 18: 29 Остановка тока полна XXXXXX, по запросу BackupPC (=) потери мощности

2011-01-17 10:18:33 XXXXXX пользователь запросил резервную копию XXXXXX (XXXXXX)

2011-01-17 10 : 18: 51 Резервное копирование отменено на xxxxxx (принятый сигнал = ALRM)

2011-01-17 10:18:52 Начало полной резервной копии на хххххх (ИДП = хххххх, доля = хххххх $)

2011-01-17 10:24:18 Создана полная резервная копия на хххххх (PID = хххххх, доля = хххххх $)

2011-01-17 11:00:01 Следующее пробуждение является 2011-01-17 12:00:01

2011-01-17 12:00:03 Следующий будильником является 2011-01-17 13:00:00

2011-01-17 13:00:01 Следующее пробуждение является 2011-01-17 14:00:00

ответ

1

Предварительно отформатируйте этот файл. Я предполагаю, что пустые строки в вашем файле отсутствуют (в противном случае их можно удалить с помощью кода с комментариями). Допустим, вы используете питон:

parsed = open("parsed.txt", 'a')                                   
    with open("log.txt") as f:                                    
    for i, line in enumerate(f): 
     # use if your lines have spaces in between 
     # if i % 2 == 0:                                      
     parsed.write(line.replace(" ",",",2)) 

Давать вам файл как:

2011-01-17,10:18:20,User xxxxxx requested backup of xxxxx (xxxxx)                                                                                         
2011-01-17,10:18:52,Started full backup on xxxxxx (pid=xxxxxx , share=xxxxxx$)                                                                
2011-01-17,10:24:18,Started full backup on xxxxxx (pid=xxxxxx , share=xxxxxx$) 
...                       

Теперь вы можете:

LOAD DATA INFILE 'parsed.txt' INTO TABLE db.my_table; 
+0

я на самом деле решил пойти с регулярным выражением, чтобы расшифровать мой файл. Был определенно длинный сложный путь, но в итоге он будет работать лучше всего. Когда я сначала начал смотреть, это именно то, что я хотел, но получается, что регулярное выражение работает тоже хорошо. Спасибо, кучка –

Смежные вопросы