我有一个名为“比较”的文件和一个名为“ 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
有没有办法使此命令更快?
答案 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