2014-01-31 34 views
-2

我有一个巨大的文本文件(18GB)的物品分开,每篇文章都有一个标题是这样的:搜索和替换枚举发现串

<text id="1403" year="" url_source="http://www.adobe.de" error="0.008696"> 

的问题是,我应该有不同的ID为每篇文章,但有一些重复的,所以我需要做的是沿文件查找ID并从1开始连续重新枚举它们。我一直在四处查看,但我还没有找到合适的解决方案,可能是因为我的缺乏知识,我会很感激你的建议

+1

是整个文件的XML吗? –

+0

内容是这样的等等等等等等.....等等等等等等等.....

+0

你能告诉我们你的文件多一点吗? – Toto

回答

1

假设ID始终是每一个文本标签的第一个属性,在Perl:

perl -M5.010 -wpi.bak -e'our $article; s/<text id="\K[0-9]+/++$article/ge' hugetextfile 

注意,它会与添加.BAK重命名文件,并通过它读,写出原来的名字,所以你需要18Gb的可用空间。

+0

警告只能使一个衬里的噪音? –

+0

你应该总是使用警告,即使是在单线上。严格的,另一方面... – ysth

+0

非常感谢,它完美的作品,我会做你的方式,因为更快 –

1

在python中: 如果它是一个有效的xml文件,你可以使用xml解析例如ElementTree

否则,遍历输入文件,并写入到输出文件:

new_id=1 
with open('out_file','w') as out_f: 
    with open('in_file','r') as in_f: 
     for line in in_f: 
      if line[:5] == '<text': 
       newline = line.split(' ') 
       newline[1] = "id=" + '"' + str(new_id) + '"' 
       newline = ' '.join(newline) 
       line = newline 
       new_id += 1 
      out_f.write(line) 

注意,这假定每个<text ...标签开始在该行的开头。如果不是这种情况,你必须修改一下。

+0

非常感谢,它完美的作品 –