テキストブロックのフィールドを読み取るには?

テキストブロックのフィールドを読み取るには?

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

おすすめ記事