Ich möchte einige Teile meiner Protokolldatei in MySQL einfügen.
Dies ist meine Protokolldatei:
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
In meiner Datenbank habe ich die Spalten[idLog] [date] [user] [module] [action] [doAjax] [ajaxAction]
Dabei gilt:
25. April 2017 -> Datum
Benutzer x -> Benutzer
m = xxx -> Modul
a = xxx -> Aktion
doajax = xxx -> doAjax-
Aktion = xxx -> ajaxAction-
IDLog wird automatisch hochgezählt.
Daher muss ich diese Informationen in meine Protokolldatei einfügen:
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)
Ich möchte das Datum aus der 4. Spalte und einige Teile der Anfrage aus der 7. Spalte ( /userx/index.php?m=meeting&doajax=date&id=3
) einfügen, die sich in meiner Datumsdatenbank befinden.
Einige Ideen?...
Ich habe versucht, ein Skript Bash zu erstellen awk
, sed
um einige Teile meiner Protokolldatei auszuschneiden und in meine Datenbank einzufügen
Antwort1
Wenn die Feldposition konstant ist, z. B.: wenn Datum immer im 2. Feld. Dann können Sie eine for-Schleife verwenden, um Dateizeilen zu verarbeiten und awk verwenden, um das erforderliche Feld abzurufen und einer Variablen zuzuweisen. Geben Sie innerhalb der Schleife die Insert-Abfrage mit variablen Werten von Datum usw. in eine Datei zurück und führen Sie schließlich alle Insert-Abfragen auf einmal aus.