Hello All,
I have many zipped XMLs (example file name in tgz formate - file_rec.trx.2016-01-23.000123.exc.85sesdzd45wsds5299c8f2994f7.tgz ) looks following and I need to verify two numbers, they are RecordNumber and EnrolData (only sequence number, NOT hole) .
for all the records, both should be equal, but as an error, for some records, record number is NOT same as EnrolData's sequence number. I need to find out what all those records and in which files. could some one please help me? I have tried this using following awk script but no luck.
XML Format:
<XXXXXXXXXXXXX>
<RecordNumber>12345</RecordNumber>
<XXXXXX>XXXXXX</XXXXXX>
<XXXXXX>XXXXXX</XXXXXX>
<XXXXXX>XXXXXX</XXXXXX>
<XXXXXXXXXXXXX><![CDATA[XXXXXXXXXXXXXX:XXXXXXXXXXXXX XXXX XXXXXX]]></XXXXXXXXXXXXX>
<EnrolData><![CDATA[E0000003350000000012345Part1 XXXXXX
XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX.XXX
XXXXXXXXXXXXXXX
XXXX
XXXXXXXXXXXXXXXXX XXXX XXXXXXXXXXXXX.XXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX.XXXXXX XXXXXXXXXXXXXX
XXXX XXXX XXXXXXXXXXXXX XXXX XXXXXXXXXXXXX
XXXX XXXXXXXXXXXXX X
XXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXX.XXX XXX
]]></EnrolData>
</XXXXXXXXXXXXX>
Script that I am trying:
#!/bin/sh
for file in $(ls file_rec.trx.{4}(\d)-{2}(\d)-{2}(\d).{1,}(\d).exc.*.tgz)
do
awk'
/<RecordNumber>/ {
getline
while ( $0 !~ /<\/RecordNumber>/ ) {
rNumber = $1
getline
}
nextline
}
/<EnrolData><\!\[CDATA\[/ {
getline
while ($0 !~ "\]\]><\/EnrolData>" ) {
eData=substr($1,19,5) #Here I actually need to get the sub string from "E0000003350000000012345Part1 XXXXXX "
#but the problem is record number may not fixed digits and the number between Part1 and E may not be fixed digits.
#one thing for sure is sequence number present always before Part1
getline
}
nextline
}
{
if (rNumber==eData){
#here I need to print the formate - <filename> : <RecordNumber> - <EnrolData sequence number>
print "$file - $(rNumber) - $(eData)"
}' $file