gpt4 book ai didi

python - 巨大的文本文件 (6Gb) 搜索和替换

转载 作者:行者123 更新时间:2023-11-28 19:39:36 24 4
gpt4 key购买 nike

我有一个巨大的文件 (6Gb),其中包含 74.000 篇这种格式的文章:

<text id="1">
bla bla bla bla.........
</text>
<text id="2">
bla bla bla bla.........
</text>
<text id="3">
bla bla bla bla.........
</text>
<text id="............ and so on untill 74.000

然后我有另一个文件,其标题对应于每个 id,如下所示:

1       title1
2 title2
3 title3
...
74000 title74000

我必须为第一个文件中的每个 id 添加相应的标题,所以我将第二个文件转换为这个脚本:

sed -i "s/<text id="1">/<text id="1" title="title1">/" file1
sed -i "s/<text id="2">/<text id="2" title="title2">/" file1
sed -i "s/<text id="3">/<text id="3" title="title3">/" file1
...
sed -i "s/<text id="74000">/<text id="74000" title="title74000">/" file1

请注意,我没有将 g 放在 sed 命令的末尾,因为它不是全局搜索,这意味着在第一次匹配时它会更改字符串并转到下一个搜索。该脚本有效,但由于文件很大,每次更改需要 12 分钟,这给了我大约两年的时间来完成所有更改,同时我需要尽快完成,所以我的问题是是否有人知道我如何执行此更改以更快的方式,也许使用其他一些实用程序、python、perls 或任何其他...

最佳答案

在 Gnu Awk 版本 4 中,您可以尝试:

gawk4 -f a.awk file2 RS="^$" file1

a.awk 是:

NR==FNR {
b["<text id=\""$1"\">"]=$2
next
}

{
n=split($0,a,/<text id=[^>]*>/,s)
printf "%s%s",s[0],a[1]
for (i=1; i<n; i++) {
ind=index(s[i],">")
printf "%s%s", substr(s[i],1,ind-1) " title=\""b[s[i]]"\">", a[i+1]
}
printf "%s",s[n]
}

输出:

<text id="1" title="title1">
bla bla bla bla.........
</text>
<text id="2" title="title2">
bla bla bla bla.........
</text>
<text id="3" title="title3">
bla bla bla bla.........
</text>

更新

为了好玩,我在 3.9Mb xml 文件(80000 个标题)和 1.3Mb 信息文件(也有 80000 个标题)上测试了一些解决方案

  • @HåkonHægland:0.629s
  • @tangent:0.645s
  • @Borodin:0.718s
  • @glennjackman:1.098s

(生成输入文件的脚本可以在这里找到:http://pastebin.com/PpTPt0gk)

更新 2

为了获得更可靠的计时结果,我平均运行了 20 次以上:

  • @EdMorton:0.485 秒(Gnu Awk 4.1 版)
  • @EdMorton:0.528 秒(Gnu Awk 版本 3.1.8)
  • @HåkonHægland:0.589s
  • @Borodin:0.599s
  • @tangent:0.626s
  • @glennjackman:1.074s

关于python - 巨大的文本文件 (6Gb) 搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21162819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com