로그 파일 nginx의 일부를 데이터베이스(mysql)에 삽입합니다.

로그 파일 nginx의 일부를 데이터베이스(mysql)에 삽입합니다.

mysql에 로그 파일의 일부를 삽입하고 싶습니다.
이것은 내 로그 파일입니다.

195.xx.x.x - - [25/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts&a=form&...
192.xx.x.x - - [25/Apr/2017:09:45:xx +0200] "POST /usery/index.php?m=customer&doajax=request&action=getContacts...
197.xx.x.x - - [25/Apr/2017:09:20:xx +0200] "GET /userx/index.php?m=meeting&doajax=date&id=3

내 데이터베이스에는 열이 있습니다[idLog] [date] [user] [module] [action] [doAjax] [ajaxAction]

그 중:
2017년 4월 25일-->날짜
userx-->사용자
m=xxx-->모듈
a=xxx-->action
doajax=xxx-->doAjax
action=xxx-->ajaxAction
idLog가 자동으로 증가됩니다.

따라서 로그 파일에 다음 정보를 삽입해야 합니다.

INSERT INTO logs VALUES('null',25/04/2017,usery,contacts,form,null,null)
INSERT INTO logs VALUES('null',25/04/2017,usery,customer,null,request,getContacts)
INSERT INTO logs VALUES('null',25/04/2017,userz,meeting,null,date,null)

/userx/index.php?m=meeting&doajax=date&id=3내 날짜 라이브러리의 4열에 날짜를 삽입하고 7열()에 요청의 일부를 삽입하고 싶습니다 .
어떤 생각? ...

awksed로그 파일의 특정 부분을 잘라내어 데이터베이스에 삽입하기 위해 bash를 사용하여 스크립트를 생성하려고 합니다.

답변1

필드 위치가 일정한 경우(예: 날짜가 항상 두 번째 필드에 있는 경우) 그런 다음 for 루프를 사용하여 파일 라인을 처리하고 awk를 사용하여 필수 필드를 가져와 변수에 할당할 수 있습니다. 날짜와 같은 변수 값이 포함된 삽입 쿼리를 루프 내부의 파일에 에코합니다. 모든 삽입 쿼리를 마지막으로 한 번 실행합니다.

관련 정보