小编gka*_*doi的帖子

关联数组:Python vs Perl vs Awk 性能

我正在处理具有约 4 亿行和 3 列的文件。前两列是字母数字字符串,而最后一列是数字。像这样的东西:

NM_001011874.1,NM_011441.4,-0.131672299779153
Run Code Online (Sandbox Code Playgroud)

我有多个这样的文件,它们的行数和 3 列数大致相同。这些不一定基于 3 列中的任何一列进行排序。我正在尝试根据前两列的组合来组合这些文件。例如:

File 1

NM_001011874.1,XR_104537.1,-0.929524370261122
NM_001011874.1,XM_003084433.1,-0.603098764428879

File 2

NM_001011874.1,XR_104537.1,-0.11254525414
NM_001011874.1,NM_005040.1,-0.20509876488

File 3

NM_001011874.1,XR_104537.1,-0.41254525414
NM_001011874.1,NM_005040.1,-0.60509876488
Run Code Online (Sandbox Code Playgroud)

我想要做的是通过使用前两列中的值组合来创建一个键,然后从该对的第三列中检索相应的值。我得到的最终输出是:

Output2 

NM_001011874.1,XR_104537.1,-0.11254525414,-0.929524370261122,-0.41254525414
NM_001011874.1,NM_005040.1,-0.20509876488,,-0.60509876488
Run Code Online (Sandbox Code Playgroud)

我正在使用 awk 执行上述操作:

awk -F',' 'NR==FNR{a[$1,$2]=$3;next}{$4=a[$1,$2];print}' OFS=',' file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

我为任务分配了 256GB。使用上述命令通过组合两个文件来生成输出大约需要 90 分钟,其中每个文件有大约 4 亿行和 3 列。输出文件再次有大约 4 亿行但有 4 列。每添加一列,生成输出文件所花费的时间就会增加。

我是按顺序进行的,即合并 file1 和 file2 以生成具有 4 列的 output1。然后合并 file3 和 output1 以生成具有 5 列的 output2,然后将 file4 和 output2 合并以生成具有 6 列的 output3,依此类推,直到我得到具有 22 列的最终输出。

我想知道在 Python 或 Perl 中执行此操作在速度和自动化方面是否更有效?我有大约 20 个这样的文件,每个文件有 3 …

python perl performance awk

-3
推荐指数
1
解决办法
1870
查看次数

标签 统计

awk ×1

performance ×1

perl ×1

python ×1