2014-01-31 67 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

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