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列()に要求の一部を挿入したいと思います。
どんな考えですか? ...
awk
sed
ログファイルの特定の部分を切り取り、データベースに挿入するためにbashを使用してスクリプトを生成しようとしています。
ベストアンサー1
フィールドの位置が一定の場合(たとえば、日付が常に2番目のフィールドにある場合)、forループを使用してファイル行を処理し、awkを使用して必要なフィールドを取得して変数に割り当てることができます。日付などの変数値を含む挿入クエリをループ内のファイルにエコーします。すべての挿入クエリを最後に1回実行します。