我在While循环中使用grep来查找另一个文件中一个文件的行,并将输出保存到一个新文件中.我的文件非常大(2.26亿行),脚本耗时很长(12天,而且还在继续).你有什么建议可以加快速度吗?也许有比GREP更好的方法?

(我还需要输出的前一行,因此是grep-b1.)

以下是我的代码:

#!/bin/bash

while IFS= read -r line; do
  grep -B 1 $line K33.21mercounts.bf.trimmedreads.dumps.fa >> 21mercounts.bf.trimmedreads.diff.kmers.K33;
done <21mercounts.bf.trimmedreads.diff.kmers 

最新情况:

包含要查找的行的输入文件为4.7 GB和226 MIO行,如下所示:

AAAGAAAAAAAAAGCTAAAAT
ATCTCGACGCTCATCTCAGCA
GTTCGTCGGAGAGGAGAGAAC
GAGGACTATAAAATTGTCGCA
GGCTTCAATAATTTGTATAAC
GACATAGAATCACGAGTGACC
TGGTGAGTGACATCCTTGACA
ATGAAAACTGCCAGCAAACTC
AAAAAACTTACCTTAAAAAGT
TTAGTACACAATATCTCCCAA

要查看的文件有26 GB和20亿行,如下所示:

>264638
AAAAAAAAAAAAAAAAAAAAA
>1
AAAGAAAAAAAAAGCTAAAAT
>1
ATCTCGACGCTCATCTCAGCA
>1
GTTCGTCGGAGAGGAGAGAAC
>28
TCTTTTCAGGAGTAATAACAA
>13
AATCATTTTCCGCTGGAGAGA
>38
ATTCAATAAATAATAAATTAA
>2
GAGGACTATAAAATTGTCGCA
>1
GGCTTCAATAATTTGTATAAC

预期输出如下:

>1
AAAGAAAAAAAAAGCTAAAAT
>1
ATCTCGACGCTCATCTCAGCA
>1
GTTCGTCGGAGAGGAGAGAAC
>2
GAGGACTATAAAATTGTCGCA
>1
GGCTTCAATAATTTGTATAAC

推荐答案

您可以在不使用shell 循环的情况下使用固定字符串搜索来try 此grep -f命令:

grep -B1 -Ff 21mercounts.bf.trimmedreads.diff.kmers \
 K33.21mercounts.bf.trimmedreads.dumps.fa > 21mercounts.bf.trimmedreads.diff.kmers.K33

Linux相关问答推荐

如何从大页分配标准数组内存

/proc/mounts 没有像 /proc/self/mountinfo 这样的源信息

如何在脚本中使用sudo修改其他用户的crontab

将(覆盖)文件移动到不同位置的同名文件夹中

如何在文本文件中向左移动特定单元格

什么是`quote`命令?

如何在 Linux 中向应用程序发出信号而不杀死它?

使用正则表达式时,Shell 'tar: not found in archive' 错误

无法覆盖符号链接 RedHat Linux

Linux命令删除.git文件夹以外的所有文件?

exec 系统调用(如 exec 和 execve)系列的功能有什么区别?

try 使用 sudo 将文件附加到根拥有的文件时权限被拒绝

如何在 shell 脚本中向文件中添加一行?

如何以编程方式禁用硬件预取?

什么是适用于 Linux 的好的 Prolog IDE?

有什么方法可以在linux中保留但不提交内存?

基于shell中正则表达式的 colored颜色 突出显示输出

Linux:处理成服务

Linux如何确定下一个PID?

仅当文件存在于 shell 脚本中时才移动