Radius 로그 필드를 기반으로 SQL 삽입을 만들고 싶습니다. 예를 들어, 두 가지 유형의 회계 로그가 있고 각 텍스트 블록을 다음과 같은 삽입으로 변환하려고 합니다.
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',[이메일 보호됨], 200.200.200.200, 552296838, 프레임워크, PPP, 14.14.14.14, 255.255.248.0, 00:00:13:0a:38:10:66:63:37:35:2e:31:36:34:63: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,10.1.4.67,stop,0 0 :27 :f4: 43:75: 52:57:83,ff,1414,0800,88:01,01,90849320842309834,45.32.55.24,08-02070000080000005208)