我有一个巨大的XML表,其中包含706,255,441行和50,446,817行。
每行有14行,包括12列和2行,带有行的打开和关闭标签。
现在,这12列行之一是主键,它本质上是一个从1开始到50446817结束的计数器,或者至少是应该。取而代之的是,它以50,816结束,并且验证软件说有1个主键不是唯一的。
考虑到行号减去3(XML东西)再除以14等于50446817,我知道验证软件是正确的,为什么会这样?
我通过Cygwin终端使用的awk脚本是这样的:
awk '{print} sub(/<c11>.*/,""){print "<c12>"++cnt"</c12>"}' FILE
我知道脚本本身与整个子字符串无关,我没有awk技能,只能从另一个脚本中真正回收它。
再一次,问题在于递增变量++cnt
在到达50,817的过程中似乎对相同的数字进行了两次计数,我已经确认它恰好是12,615,766。
以下类型的输入将不胜感激:
- 实现该awk脚本意图执行的另一种方法(创建主键列)
- 为什么会发生这种情况的解释
- 您认为相关的其他输入
我已经尝试做的诊断或解决问题的方法:
- 使用其他字符串打印,以查看问题是否源于找不到位置(事实并非如此)
- 证明行数确实高于计数器达到的行数。
- 找出重复的数字。
编辑: 根据大众的需求,此表中的两行是这样的(我无法包含实际数据,因为它包含分类信息,因此所有数字均已替换为7,字母已替换为B / b)。
<row>
<c1>7777777777</c1>
<c2>BB</c2>
<c3>03/20/2013 00:00:00</c3>
<c4>-1</c4>
<c5>777777</c5>
<c6>7</c6>
<c7>01/01/2013 00:00:00</c7>
<c8>77777777</c8>
<c9>7.77</c9>
<c10>77777-Bbbbbbbb Bbbbb</c10>
<c11>77-</c11>
<c12>12615766</c12>
</row>
<row>
<c1>7777777777</c1>
<c2>BB</c2>
<c3>03/20/2013 00:00:00</c3>
<c4>-7</c4>
<c5>777777</c5>
<c6>7</c6>
<c7>07</c7>
<c8>77777777</c8>
<c9>7.77</c9>
<c10>77777-Bbbbbbbb Bbbbb</c10>
<c11>77-</c11>
<c12>12615766</c12>
</row>
第12列是由上述脚本创建的,而下一行则直接位于其下方。问题在于,当递增变量达到12,766时,c12列将使用完全相同的键进行打印。