2011-01-20 7 views
2

리눅스 로그 파일을 가져 와서 데이터를 mysql 테이블에 입력하고 각 필드를 열로 구분해야합니다. LOAD DATA INFILE 명령을 사용하려고했습니다. 문제는 로그 파일에 공백이 포함되어 있기 때문에 데이터가 구분되지 않고 FIELDS BY BY '를 (를) 종료 할 수 없음' '입니다. 사람이 어떤 생각을 가지고있는 경우 나 파일의Python을 사용하여 MySQL에 LOG 파일 정보 입력

예를 알려 주시기 바랍니다 :

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)

,451,515,

2011-01-17 10시 18분 52초가 XXXXXX에 전체 백업을 시작 (PID = XXXXXX, 주 = XXXXXX $)

2011-01-17 XXXXXX에 10시 24분 18초 시작 전체 백업 (PID = XXXXXX 공유 = XXXXXX의 $)

2011-01-17 11시 0분 1초 다음 웨이크 2011-01-17 12시 0분 1초

2011-01-17 12시 0분 3초 다음의 기상 인 2011-01-17 13시 0분 0초

2011-01-17 13시 0분 1초는 다음의 기상이다 2011-01-17 14시 0분 0초

답변

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

나는 실제로 내 파일을 해독하는 정규식으로 이동하기로 결정했다. 분명히 길고 복잡한 방법 이었지만 결국에는 효과가있을 것입니다. 내가 처음에 이것을보기 시작했을 때 나는 원했던 것이지만 정규 표현식이 잘 작동한다는 것을 알게되었다. 고마워요. –

관련 문제