连接大文件而不使用其顶层行python或bash?

2024-09-30 18:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有10.txt文件的基因型数据-每个都来自不同的染色体。它们每行的列数都相同,而且列的顺序也都相同。每个文件以相同的第一行开始。在

我想做的是将所有10个文件按chr1,chr2,chr3…chr10的顺序附加到一个基因型文件中。但是,我希望只保留chr1的头行,这样它将保留头行,并在将它们全部连接在一起之前从后续染色体中删除所有的头。在

例如,如果我有:

文件1:

chr, position, geno1, geno2
1, 100, A, C
1, 200, G, T

文件2:

^{pr2}$

我想以组合文件结尾:

chr, position, geno1, geno2
1, 100, A, C
1, 200, G, T
2, 50, T, A
2, 150, C, G

考虑到每个文件的大小为400-600Mb,而生成的文件大约为6Gb,那么最好/最快的方法是什么?我对编写Python和linuxshell脚本比较满意,但是解释一下为什么代码很快以及它在做什么将是一个加分!谢谢!在


Tags: 文件数据txt顺序positionchr1染色体基因型
2条回答

最快的方法就是不去做。在

例如,如果要将最终文件输入程序,则可以使用:

{
  head -n 1 file1
  for f in file{1..10}
  do
    tail -n +2 "$f"
  done
} | yourprogram

这将生成一个与您描述的完全相同的流并将其提供给您的程序,但不会浪费时间将其写入文件。在

如果您确实需要一个文件,可以使用> file,而不是| yourprogram。对于您的少量数据来说,这已经足够好了。在

当您的数据达到TB范围时,您可以开始考虑跨设备的预分配和并行写入。在

你能做到的

cp chr1 output
for f in chr[2-9] chr10; do sed -n '2,$p' $f >> output; done

评论后更新
实际上,用尾巴更简单

^{pr2}$

相关问题 更多 >