如何使阅读速度更快(如何使用grep代替)

时间:2018-10-25 04:21:51

标签: linux sed while-loop grep command

我有一个名为“比较”的文件和一个名为“ 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  
...  

我想将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

有没有办法使此命令更快?

1 个答案:

答案 0 :(得分:1)

使用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