我有一个字符序列的文本文件,由两行组成:标题和下一行中的序列本身。该文件的结构如下:
>header1
aaaaaaaaa
>header2
bbbbbbbbbbb
>header3
aaabbbaaaa
[...]
>headerN
aaabbaabaa
在另一个文件中,我有一个要删除的序列标题列表,如下所示:
>header1
>header5
>header12
[...]
>header145
我们的想法是从第一个文件中删除这些序列,因此所有这些标头+以下行。我使用 sed 执行此操作,如下所示,
while read line; do sed -i "/$line/,+1d" first_file.txt; done < second_file.txt
它可以工作,但需要很长时间,因为我使用 sed 多次加载整个文件,而且它很大。关于如何加快这个过程的任何想法?
您遇到的问题很容易回答,但在处理通用 fasta 文件时不会对您有帮助。 Fasta 文件有一个序列头,后面跟着一行或多行,可以将这些行连接起来表示序列。 Fasta 文件格式大致遵循以下规则:
- 描述行 (defline) 或标题/标识符行,以 字符 (
>
),给出序列的名称和/或唯一标识符,并且还可以包含附加信息。
- 描述行后面是标准单字母字符串中的实际序列本身。除有效字符之外的任何内容都将被忽略(包括空格、制表符、星号等)。
- 该序列可以跨越多行。
- 多序列 FASTA 格式可以通过在一个公共文件中连接几个单序列 FASTA 文件来获得,通常是在两个后续序列之间留一个空行。
大多数提出的方法在具有多行序列的多 fasta 上都会失败
以下内容将始终有效:
awk '(NR==FNR) { toRemove[$1]; next }
/^>/ { p=1; for(h in toRemove) if ( h ~ $0) p=0 }
p' headers.txt file.fasta
这与答案非常相似EdMorton https://stackoverflow.com/a/55636520/8344060 and 阿努巴胡瓦 https://stackoverflow.com/a/55636635/8344060但这里的区别在于文件headers.txt
可以仅包含标头的一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)