【发布时间】:2019-01-24 12:11:06
【问题描述】:
我有一个 XML 表,其行结构如下:
<row>
<C1>foobar</C1>
<C2>foobar</C2>
<C3>foobar</C3>
<C4>foobar</C4>
<C5>foobar</C5>
<C6>foobar</C6>
<C7>foobar</C7>
<C8>foobar</C8>
<C9>foobar</C9>
<C10>foobar</C10>
<C11>foobar</C11>
<C12>foobar</C12>
</row>
我想做的是在第 12 列之后添加第 13 列,它需要有一个递增的数字作为其值作为主键(从 1 开始,每行增加 1,如 X++ 等) .值得注意的是大约有 2000 万行。
我一直在尝试使用 CygWin (Mintty) 来解决这个问题,但我完全没有使用它或任何 Unix 的经验,这只是我被推荐的第一件事,它实际上能够加载这些可怕的 XML文件。
对于初学者,我尝试使用 Sed 使用以下命令插入第 13 列:
-i -e 's/\/C12>/\/C12><C13><\/C13>/g' t1s.txt
我的想法是我会用它本身 + 第 13 列替换关闭的 C12 括号。相反,它只是用 C13 替换了 C12,就好像斜线没有正确转义一样。
可能有一个“插入”而不是“替换”的命令,这使得我正在尝试做的事情看起来完全疯狂,但我不知道那个命令会是什么并且没有太多的运气搜索。我最接近的方法是改用 AWK,如果这对 Sed 不可行,我愿意这样做,但我不知道怎么做,而且似乎也有点困难。
我希望实现的是将文档更改如下(这很长,但是如果不包括所有内容显然没有意义。这个问题只涉及如何在每行中添加第13列,其他 12 个只是上下文):
<row>
<C1>foobar</C1>
<C2>foobar</C2>
<C3>foobar</C3>
<C4>foobar</C4>
<C5>foobar</C5>
<C6>foobar</C6>
<C7>foobar</C7>
<C8>foobar</C8>
<C9>foobar</C9>
<C10>foobar</C10>
<C11>foobar</C11>
<C12>foobar</C12>
<C13>1</C13>
</row>
<row>
<C1>foobar</C1>
<C2>foobar</C2>
<C3>foobar</C3>
<C4>foobar</C4>
<C5>foobar</C5>
<C6>foobar</C6>
<C7>foobar</C7>
<C8>foobar</C8>
<C9>foobar</C9>
<C10>foobar</C10>
<C11>foobar</C11>
<C12>foobar</C12>
<C13>2</C13>
</row>
<row>
<C1>foobar</C1>
<C2>foobar</C2>
<C3>foobar</C3>
<C4>foobar</C4>
<C5>foobar</C5>
<C6>foobar</C6>
<C7>foobar</C7>
<C8>foobar</C8>
<C9>foobar</C9>
<C10>foobar</C10>
<C11>foobar</C11>
<C12>foobar</C12>
<C13>3</C13>
</row>
<row>
<C1>foobar</C1>
<C2>foobar</C2>
<C3>foobar</C3>
<C4>foobar</C4>
<C5>foobar</C5>
<C6>foobar</C6>
<C7>foobar</C7>
<C8>foobar</C8>
<C9>foobar</C9>
<C10>foobar</C10>
<C11>foobar</C11>
<C12>foobar</C12>
<C13>4</C13>
</row>
<row>
<C1>foobar</C1>
<C2>foobar</C2>
<C3>foobar</C3>
<C4>foobar</C4>
<C5>foobar</C5>
<C6>foobar</C6>
<C7>foobar</C7>
<C8>foobar</C8>
<C9>foobar</C9>
<C10>foobar</C10>
<C11>foobar</C11>
<C12>foobar</C12>
<C13>5</C13>
</row>
<row>
<C1>foobar</C1>
<C2>foobar</C2>
<C3>foobar</C3>
<C4>foobar</C4>
<C5>foobar</C5>
<C6>foobar</C6>
<C7>foobar</C7>
<C8>foobar</C8>
<C9>foobar</C9>
<C10>foobar</C10>
<C11>foobar</C11>
<C12>foobar</C12>
<C13>6</C13>
</row>
这持续了几百万行......
请注意,唯一的变化是增加了第 13 列,并且每行的值都在增加。这就是这个问题的全部内容,其他 12 列只是周围的结构。
【问题讨论】:
-
其实是为了说明有12个columns都与这个问题完全无关。我只想添加第 13 列,这个问题只涉及该列。我将尝试编辑问题以反映这一点。
-
@Ed Morton 在那里,我编辑了示例以显示所有列。它现在相当庞大,但我希望它更有意义。请再次注意,每行中的前 12 列不是问题的一部分,它们包含的数据对问题并不重要,这就是我在其值中写“foobar”的原因。
-
现在有意义吗?我不确定这其中的哪一部分一开始就不清楚。我只是想在 XML 表中插入一个列并分配它的值。至少在概念上,我认为这是非常基本的。
-
这篇文章在第一行字面上说“行结构如下”,这意味着这是 2000 万行中的一个示例,我需要通过添加另一个来更改每一行列。我包括了 12 个 foobar 行,以防有人编写脚本等,将行号、缩进等考虑在内。另外,在我看来,您在这里自相矛盾。你说我应该删掉一些列,但指责我没有完全按照预期定义输入/输出。我真的没有其他东西可以添加到输入或输出中。
-
至于第二个...输出。它下面的第一行字面意思是“这持续了几百万行”。所以 6 只是一个随机数,因为我显然不能发布其中的 2000 万个,但有人告诉我,第 13 行的“计数器”的概念很难想象(我也不明白,因为我明确表示它是一个主键,这几乎就是它们的外观),所以我显示它数到 6。可能是 4。可能是 11.673.201。没关系,我展示了我希望第 13 行出现在哪里以及我希望如何分配它的值。