Quero inserir algumas partes do meu arquivo de log no mysql.
Este é o meu arquivo de log:
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
No meu banco de dados eu tenho as colunas[idLog] [date] [user] [module] [action] [doAjax] [ajaxAction]
Onde:
25/04/2017--> data
userx --> usuário
m=xxx -->módulo
a=xxx -->action
doajax=xxx-->doAjax
action=xxx-->ajaxAction
idLog é incremento automático
Então preciso inserir no meu arquivo de log essa informação:
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)
Quero inserir a data que está na 4ª coluna e algumas partes da requisição que está na 7ª coluna ( /userx/index.php?m=meeting&doajax=date&id=3
) que estão na minha base de datas.
Algumas ideias?...
Tentei criar um script bash usando awk
e sed
para cortar algumas partes do meu arquivo de log e inserir no meu banco de dados
Responder1
Se a posição dos campos for constante, por exemplo: se a data estiver sempre no 2º campo. Então você pode usar o loop for para processar linhas de arquivo e usar awk para obter o campo obrigatório e atribuir a uma variável. Dentro do loop, ecoe a consulta de inserção com valores variáveis de data, etc. para um arquivo.. e, finalmente, execute todas as consultas de inserção de uma vez.