以下のようにtxtファイルを解析する必要があります。解析する必要がある部分は「SASN2010Aber.CallEventRecord.egsnPDPRecord」で始まり、テキストは2つの括弧の間にあります{...}
。キーテキストの長さが一定ではないため、場所に基づいて解析できません。これらの行グループを解析して分離する方法は?
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
~として定義された右エココードS分割ツール- ブロックは
print RS$0 >"file"i++
各レコード()を、および(上記のOPの例の入力にある3つのファイル)$0
という3つの別々のファイルに保存します。file0
file1
file2
i++
生成されるファイルの数を増やすために使用されます。infile
使用する入力ファイルの名前になりますawk
。