0

我有一个 XML 文件,其中包含数字等内容。就像是:

<things>
    <a name="cat">
        <vecs>(100,20),(200,40),(50,85)</vecs>
    </a>
    <b name="dog">
        <vecs>(0,10),(5,75)</vecs>
        <ratio>85.5</ratio>
    </b>
    ... many more elements and numbers ...
</things>

不幸的是<vecs>,我文件中包含元素的所有数字都比应有的大 4 倍。我需要将它们全部乘以 0.25。中的数字<ratio>和其他元素都很好。例如,<vecs>上面的第一行应该是:

<vecs>(25,5),(50,10),(12.5,21.25)</vecs>

是否有一种方便的解决方案(例如 UNIX 命令行工具、bash 脚本等)来处理文件,以便我可以找到存在于特定上下文中的所有数字(例如<vecs>和之间</vecs>),对它们执行数学运算,以及用操作的结果替换每个实例中的现有数字文本?

不,我不是要你写一个完整的程序来详细解决这个特定的问题。我想知道是否有用于此类目的的现有工具或可以完成这项工作的现有工具的巧妙组合。

4

1 回答 1

1

问题本身相当简单,但语法不常见,必须使用通用脚本语言来解决问题。例如在 Python 中你会写这样的东西

from __future__ import print_function
import re

def transform(match):
 return '(%.2f,%.2f)' % (int(match.group(1))*0.25,
                         int(match.group(2))*0.25)

for line in file('test.xml'):
    if '<vecs>' in line:
        print(re.sub(r'\((\d+),(\d+)\)',transform,line),end='')
    else:
        print(line,end='')

对于特定问题,最好的办法是学习一种脚本语言并用它来解决它们。

如果你想使用 unix 工具来做这种事情,sed 和 awk 是你的朋友。

于 2013-03-30T15:05:04.473 回答