ログ ファイルの一部を 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]
ここで:
25/Apr/2017--> date
userx --> user
m=xxx -->module
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 列目 ( ) にあるリクエストの一部を挿入したいです。
何かアイデアはありますか?...
ログファイルの一部を切り取り、データベースに挿入するために、awk
およびを使用してスクリプトbashを作成しようとしました。sed
答え1
フィールドの位置が一定である場合、たとえば、日付が常に 2 番目のフィールドにある場合、for ループを使用してファイル行を処理し、awk を使用して必要なフィールドを取得し、変数に割り当てることができます。ループ内で、日付などの変数値を含む挿入クエリをファイルにエコーし、最後にすべての挿入クエリを一度に実行します。