Quiero insertar algunas partes de mi archivo de registro en MySQL.
Este es mi archivo de registro:
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
En mi base de datos tengo las columnas[idLog] [date] [user] [module] [action] [doAjax] [ajaxAction]
Donde:
25/abr/2017--> fecha
usuariox --> usuario
m=xxx -->módulo
a=xxx -->acción
doajax=xxx-->doAjax
acción=xxx-->ajaxAction
idLog es incremento automático
Entonces necesito insertar en mi archivo de registro esa información:
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)
Quiero insertar la fecha que está en la cuarta columna y algunas partes de la solicitud que está en la séptima columna ( /userx/index.php?m=meeting&doajax=date&id=3
) que están en mi base de fechas.
¿Algunas ideas?...
Intenté crear un script bash usando awk
y sed
para cortar algunas partes de mi archivo de registro e insertarlo en mi base de datos.
Respuesta1
Si la posición de los campos es constante, por ejemplo: si la fecha siempre está en el segundo campo. Luego puede usar el bucle for para procesar líneas de archivos y usar awk para obtener el campo requerido y asignarlo a una variable. Dentro del bucle, haga eco de la consulta de inserción con valores variables de fecha, etc. en un archivo... y finalmente ejecute todas las consultas de inserción de una vez.