针对特定应用程序更快地替代 bash `cut`

Mic*_*ael 5 c bash performance awk cut

我有一个非常大的制表符分隔文件。制表符分隔的文件是二进制的,将由该工具进行流式传输samtools(速度非常快,不是瓶颈)。现在我只想输出第一个选项卡之前的内容。

在我当前的管道命令中cut是瓶颈:

samtools view -@ 15 -F 0x100 file.bam | cut -f 1 | pigz > out.gz
Run Code Online (Sandbox Code Playgroud)

我尝试使用awk '{print $1}'. This is not sufficiently faster I also tried using 平行in combination with切割,但这也不会提高太多速度。

我想最好有一个工具,它只输出字符串直到第一个选项卡,然后完全跳过整行。

您对更适合我的目的的工具有什么建议吗?我想,理想情况下,人们会编写一个小型 C 程序,但我的 C 有点生疏,所以对我来说会花费太长时间。

Mic*_*ael 2

最后,在 htslib 开发人员(这是 samtools 的基础)的大力帮助下,我破解了一个小型 C 程序,它直接过滤 BAM 文件并写入 gzip。

所以不再需要管道。该解决方案比上面的 C 代码解决方案(来自 Stephan)大约快 3-4 倍。

请参阅此处: https: //github.com/samtools/samtools/issues/1672