我有一个XML文件,其中包含许多帐户标记,其中包含很少的其他标记,包括RecordNumber和OriginalData。我想比较来自该XML文件的2个数字,一个来自RecordNumber标签,另一个来自OriginalData - 这正是part_name之后的6个字符。理想情况下,这些2个数字应该相等,但某些文件中某些xml标签的相似性如何。
使用awk或sed会很棒???
这是我的XML文件的示例。
....
<Account>
.......
<RecordNumber>224</RecordNumber>
......
<OriginalData><![CDATA[E0000003350000077558part_name 89947 0123456789012345 C2016-01-08T13:04:41-05:00001004000000000000000035.000000000000000000035.000 US034F93Geg824G36L8F 0002
.....
....
感谢您的帮助。
答案 0 :(得分:0)
cat file.xml | sed -e "s/^.*RecordNumber>\([0-9]*\)<\/RecordNumber.*part_name *\([0-9]*\) *.*$/RecordNumber=\1\npart_name=\2/g"
答案 1 :(得分:0)
这是一个相当长的shell脚本。它会将RecordNumber和part_name号捕获到不同的文件中。然后它使用diff
来查找不同的数字。如果存在任何差异,您可以在xml文件中查找此数字。
cat FILE.xml |
sed -zr '
# normalize xml, insert newlines for RecordNumber and part_name
s#</?RecordNumber>#\n&\n#g ;
s/part_name.{6}/\n&\n/g ;
' |
sed -rn '
# write the numbers into different files
/<RecordNumber>/,/<\/RecordNumber>/ {
/[0-9]+/ { w rval.txt
p;
}
}
/part_name/ {
s/part_name[ ]+//g;
w pval.txt
p;
}
'
# compare the numbers
diff rval.txt pval.txt