Radiusログフィールドに基づいてSQL挿入を作成したいと思います。たとえば、2種類の会計ログがあり、各テキストブロックを次の挿入に変換したいとします。
INSERT INTO accouting (date, User-Name, NAS-IP-Address,...)
VALUES ('Thu, 04 Feb 2016 00:21:55.600', [email protected], 200.200.200.200,...)
スクリプトはチャンク単位で読み取り、対応するフィールドを識別し、それに基づいて挿入を生成する必要があります。
可能であればシェルスクリプト。
ありがとうございます!
Thu, 04 Feb 2016 00:21:55.600
User-Name = [email protected]
NAS-IP-Address = 200.200.200.200
NAS-Port = 552296838
Service-Type = Framed
Framed-Protocol = PPP
Framed-IP-Address = 14.14.14.14
Framed-IP-Netmask = 255.255.248.0
Vendor-Specific = 00:00:13:0a:38:10:66:63:37:35:2e:31:36:34:63:2e:33:36:34:65
NAS-Identifier = c-bl-rt-router
Acct-Status-Type = Start
Acct-Delay-Time = 0
Acct-Session-Id = 97022017
Acct-Authentic = RADIUS
Event-Timestamp = 1454552515
NAS-Port-Type = Ethernet
Unisphere-Egress-Policy-Name = block-out
NAS-Port-ID = 1073994681.17180390:
Unisphere-Ingress-Policy-Name = block-in
Thu, 04 Feb 2016 00:21:30.455
User-Name = telco
NAS-IP-Address = 172.23.10.11
Service-Type = Framed
Framed-Protocol = GPRS PDP Context
Framed-IP-Address = 10.2.3.1
3GPP-Charging-Id = 1239512257
Called-Station-Id = telco.net
Calling-Station-Id = 132333355555
NAS-Identifier = 10.1.4.67
Acct-Status-Type = Stop
Acct-Input-Octets = 0
Acct-Output-Octets = 0
Acct-Session-Id = BB481C4649e174c1
Acct-Session-Time = 0
Acct-Input-Packets = 0
Acct-Output-Packets = 0
Acct-Terminate-Cause = User Request
Acct-Input-Gigawords = 0
Acct-Output-Gigawords = 0
Event-Timestamp = 1454552490
3GPP-CG-Address = 0.0.0.0
NAS-Port-Type = Virtual
3GPP-PDPType = IPv4
3GPP-GGSN-MCC-MNC = 1414
3GPP-Negotiated-DSCP = 14
3GPP-SGSN-MCC-MNC = 1414
3GPP-IMSI = 724340302052610
3GPP-Selection-Mode = 0
3GPP-NSAPI = 8
3GPP-SGSN-Address = 45.32.55.24
3GPP-User-Location-Info = 00:27:f4:43:75:52:57:83
3GPP-Session-Stop-Indicator = ff
3GPP-IMSI-MCC-MNC = 1414
3GPP-Charging-Characteristics = 0800
3GPP-MS-Timezone = 88:01
3GPP-RAT-Type = 01
3GPP-IMEISV = 90849320842309834
3GPP-GGSN-Address = 45.32.55.24
3GPP-GPRS-QoS-Profile = 08-02070000080000005208
ベストアンサー1
解決策は次のとおりです。TxR:
@(repeat)
@date
@ (collect)
@key = @value
@ (last)
@ (end)
@ (output)
INSERT INTO accouting (date, @{key ", "})
VALUES ('@date', @{value ", "})
@ (end)
@(end)
ランニング:
$txr .txr データの挿入 INSERT INTO ACCOUNTING(日付、ユーザー名、NAS-IP-アドレス、NAS-ポート、サービスタイプ、フレーム-プロトコル、フレーム-IP-アドレス、フレーム-IP-ネットマスク、ベンダー固有、NAS-識別子、アカウント-ステータス-タイプ、課金遅延時間、アカウントセッションID、アカウント確認、イベントタイムスタンプ、NASポートタイプ、Unisphere送信ポリシー名、NASポートID、Unisphere受信ポリシー - 名前) Value(「2016年2月4日木曜日00:21:55.600」、[Eメール保護]、200.200.200.200、552296838、フレームワーク、PPP、14.14.14.14、255.255.248.0、00:00:13:0a:38:10:66:63:37:35:23 2e :33:36:34:65,c-bl-rt-router,start,0,97022017,RADIUS,1454552515,ethernet,blocked,1073994681.17180390:,blocked) INSERT INTOアカウント(日付、ユーザー名、NAS-IPアドレス、サービスタイプ、フレームプロトコル、フレームIPアドレス、3GPPアカウントID、コールステーションID、コールステーションID、NAS識別子、アカウントステータスタイプ、アカウント入力オクテット、会計出力オクテット、会計セッションID、会計セッション時間、会計入力パケット、会計出力パケット、会計終了理由、アカウント入力 - 数千メガワード、アカウントアウト - ギガワード、イベントタイムスタンプ、3GPP-CG-アドレス、NASポートタイプ、3GPP-PDPタイプ、3GPP-GGSN-MCC-MNC、3GPP-ネゴシエーション-DSCP、3GPP-SGSN-MCC-MNC、3GPP-IMSI、3GPP-選択モード、3GPP-NSAPI、3GPP-SGSN-アドレス、3GPP-ユーザー位置情報、3GPP-セッション停止インジケータ、3GPP-IMSI-MCC-MNC、3GPP-充電機能、3GPP-MS - タイムゾーン、3GPP-RAT-タイプ、3GPP-IMEISV、3GPP-GGSN-アドレス、3GPP-GPRS- QoSプロファイル) Value("2016 年 2 月 4 日木曜日 00:21:30.455",telco,172.23.10.11,framed,GPRS PDP context,10.2.3.1,1239512257,telco.net,132333355555,1.0 27 :f4: 43:75: 52:57:83,ff,1414,0800,88:01,01,90849320842309834,45.32.55.24,08-020700000800000052