아래와 같이 txt 파일을 구문 분석해야 합니다. 구문 분석해야 하는 부분은 "SASN2010Aber.CallEventRecord.egsnPDPRecord"로 시작하고 텍스트는 두 괄호 사이에 있습니다 {...}
. 키 텍스트 길이가 일정하지 않아 위치를 기준으로 구문 분석할 수 없습니다. 이러한 라인 그룹을 구문 분석하고 분리하는 방법은 무엇입니까?
SASN2010Aber.CallEventRecord.egsnPDPRecord
{
recordType : '70'D
chargingID : '306457009'D
sgsnAddress
{
Address : 'FBDC'H
}
pdpType : 'F121'H
dynamicAddressFlag : '1'D
listOfTrafficVolumes
{
[0]
{
changeTime : '1412031353342B0200'H
}
}
duration : '0'D
causeForRecClosing : '0'D
recordSequenceNumber : '1'D
rATType : '1'D
listOfServiceData
{
[0]
{
ratingGroup : '4'D
resultCode : '4010'D
timeUsage : '0'D
timeOfReport : '1412031353342B0200'H
failureHandlingContinue : '0'D
serviceIdentifier : '404'D
}
}
}
SASN2010Aber.CallEventRecord.egsnPDPRecord
{
recordType : '70'D
chargingID : '306457009'D
sgsnAddress
{
Address : 'FBDC'H
}
pdpType : 'F121'H
dynamicAddressFlag : '1'D
listOfTrafficVolumes
{
[0]
{
changeTime : '1412031353342B0200'H
}
}
causeForRecClosing : '0'D
rATType : '1'D
listOfServiceData
{
[0]
{
ratingGroup : '4'D
resultCode : '4010'D
failureHandlingContinue : '0'D
serviceIdentifier : '404'D
}
[1]
{
ratingGroup : '4'D
resultCode : '4010'D
failureHandlingContinue : '0'D
serviceIdentifier : '404'D
}
}
}
SASN2010Aber.CallEventRecord.egsnPDPRecord
{
sgsnAddress
{
Address : 'FBDC'H
}
pdpType : 'F121'H
listOfTrafficVolumes
{
[0]
{
changeTime : '1412031353342B0200'H
}
}
duration : '0'D
listOfServiceData
{
[3]
{
ratingGroup : '4'D
resultCode : '4010'D
timeUsage : '0'D
serviceIdentifier : '404'D
}
}
}
답변1
하나 있다앗명령은 다음과 같습니다.
awk 'NR!=1{print RS$0 >"file"i++}' RS='SASN2010Aber.CallEventRecord.egsnPDPRecord' infile
NR!=1
첫 번째 빈 레코드를 건너뜁니다 .RS='...'
SASN2010Aber.CallEventRecord.egsnPDPRecord
~로써 정의 된오른쪽에코코드에스쪼개는 도구- 그리고 블록은
print RS$0 >"file"i++
각 레코드( )를 , 및 (위 OP의 예제 입력에 있는 3개 파일)$0
이라는 3개의 개별 파일에 저장합니다.file0
file1
file2
i++
생성되는 파일 수를 늘리는 데 사용됩니다.infile
사용할 입력 파일의 이름이 됩니다awk
.