gpt4 book ai didi

linux - 如何使 while 读取更快(如何使用 grep 代替)

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:23 26 4
gpt4 key购买 nike

我有一个名为“compare”的文件和一个名为“final_contigs_c10K.fa”的文件
我想从“final_contigs_c10K.fa”中删除包含“比较”中特定字符串的行和下一行。
比较看起来像这样:

k119_1
k119_3
...

比较行数为26364。
final_contigs_c10K.fa 看起来像:

>k119_1  
AAAACCCCC
>k119_2
CCCCC
>k119_3
AAAAAAAA
...

我想把 make final_contigs_c10K.fa 变成一个格式:

>k119_1
AAAACCCCC
>k119_3
AAAAAAAA
...

我试过这段代码,但这段代码花费了太多时间,尽管它看起来工作正常。我认为这需要太多时间,因为比较中的行数是 26364,与我测试代码的其他文件相比太多了。

while read line; do sed -i -e "/$line/ { N; d; }" final_contigs_c10K.fa; done < compare

有没有办法让这个命令更快?

最佳答案

使用 awk

$ awk 'NR==FNR{a[">" $1];next}$1 in a{p=3} --p>0' compare final_contigs_c10K.fa
>k119_1
AAAACCCCC
>k119_3
AAAAAAAA

这将产生输出到 stdout 即。不会对原始文​​件进行任何更改。

解释:

$ awk '
NR==FNR { # process the first file
a[">" $1] # hash to a, adding > while at it
next # process the next record
} # process th second file after this point
$1 in a { p=3 } # if current record was in compare file set p
--p>0 # print current file match and the next record
' compare final_contigs_c10K.fa # mind the file order

关于linux - 如何使 while 读取更快(如何使用 grep 代替),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52981319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com