2011-01-20 128 views
2

我需要一个linux日志文件并将数据输入到mysql表中,并将每个字段分隔成多列。我一直在尝试使用LOAD DATA INFILE命令。唯一的问题是,数据没有分隔,我不能终止FIELDS BY,因为文件中包含日志消息中的空格。如果任何人有任何想法,请让我知道文件的使用Python将输入LOG文件信息输入到MySQL

例子:

2011-01-17 10时18分20秒用户XXXXXX请XXXXX(XXXXX)

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十点18分52秒开始于XXXXXX完全备份(PID = XXXXXX,份额= XXXXXX $)

2011-01-17上XXXXXX十时24分18秒开始全备份(PID = XXXXXX,共享= XXXXXX $)

2011-01-17接着为11:00:01唤醒是2011-01-17 12:00:01

2011-01-17十二时00分03秒下一个唤醒是2011-01-17 13:00:00

2011-01-17 13:00:01下一个醒来是2011-01-17 14:00:00

回答

1

预格式化此文件。我假设文件中的空白行不在那里(否则,您可以使用注释代码将其删除)。比方说,你正在使用python:

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

其实,我决定用正则表达式去破译我的文件。这绝对是一个漫长而复杂的过程,但它最终会成功。当我最初开始查看时,这正是我想要的,但结果是正则表达式运行良好。感谢一群人 – 2011-01-24 17:14:16