Els*_*ris 4 linux bash grep while-loop
我在 while 循环中使用 grep 在另一个文件中查找一个文件中的行并将输出保存到新文件中。我的文件非常大(2.26 亿行),并且脚本需要很长时间(12 天并且还在增加)。您有加快速度的建议吗?也许有比 grep 更好的方法?
(我还需要前一行的输出,因此 grep -B 1。)
这是我的代码:
#!/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
Run Code Online (Sandbox Code Playgroud)
更新:
包含要查找的行的输入文件大小为 4.7 GB,有 226 mio 行,如下所示:
AAAGAAAAAAAAAGCTAAAAT
ATCTCGACGCTCATCTCAGCA
GTTCGTCGGAGAGGAGAGAAC
GAGGACTATAAAATTGTCGCA
GGCTTCAATAATTTGTATAAC
GACATAGAATCACGAGTGACC
TGGTGAGTGACATCCTTGACA
ATGAAAACTGCCAGCAAACTC
AAAAAACTTACCTTAAAAAGT
TTAGTACACAATATCTCCCAA
Run Code Online (Sandbox Code Playgroud)
要查看的文件大小为 26 GB,有 20 亿行,如下所示:
>264638
AAAAAAAAAAAAAAAAAAAAA
>1
AAAGAAAAAAAAAGCTAAAAT
>1
ATCTCGACGCTCATCTCAGCA
>1
GTTCGTCGGAGAGGAGAGAAC
>28
TCTTTTCAGGAGTAATAACAA
>13
AATCATTTTCCGCTGGAGAGA
>38
ATTCAATAAATAATAAATTAA
>2
GAGGACTATAAAATTGTCGCA
>1
GGCTTCAATAATTTGTATAAC
Run Code Online (Sandbox Code Playgroud)
预期的输出将是这样的:
>1
AAAGAAAAAAAAAGCTAAAAT
>1
ATCTCGACGCTCATCTCAGCA
>1
GTTCGTCGGAGAGGAGAGAAC
>2
GAGGACTATAAAATTGTCGCA
>1
GGCTTCAATAATTTGTATAAC
Run Code Online (Sandbox Code Playgroud)
grep -f您可以在不使用 shell 循环并使用固定字符串搜索的情况下尝试此命令:
grep -B1 -Ff 21mercounts.bf.trimmedreads.diff.kmers \
K33.21mercounts.bf.trimmedreads.dumps.fa > 21mercounts.bf.trimmedreads.diff.kmers.K33
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |