Loï*_*hac 3 bash awk sed fasta
我有一个字符序列的文本文件,由两行组成:标题和下一行中的序列本身。该文件的结构如下:
>header1
aaaaaaaaa
>header2
bbbbbbbbbbb
>header3
aaabbbaaaa
[...]
>headerN
aaabbaabaa
Run Code Online (Sandbox Code Playgroud)
在另一个文件中,我有一个要删除的序列标题列表,如下所示:
>header1
>header5
>header12
[...]
>header145
Run Code Online (Sandbox Code Playgroud)
这个想法是从第一个文件中删除这些序列,因此所有这些标头+以下行。我使用 sed 执行此操作,如下所示,
while read line; do sed -i "/$line/,+1d" first_file.txt; done < second_file.txt
Run Code Online (Sandbox Code Playgroud)
它可以工作,但需要很长时间,因为我使用 sed 多次加载整个文件,而且它很大。关于如何加快这个过程的任何想法?
您遇到的问题很容易回答,但在处理通用 fasta 文件时不会对您有帮助。Fasta 文件有一个序列头,后面跟着一行或多行,可以将这些行连接起来以表示序列。Fasta 文件格式大致遵循以下规则:
- 描述行 (defline) 或标题/标识符行以 <greater-then> 字符 (
>) 开头,给出序列的名称和/或唯一标识符,并且还可能包含附加信息。- 描述行后面是标准单字母字符串中的实际序列本身。除有效字符外的任何内容都将被忽略(包括空格、制表符、星号等)。
- 该序列可以跨越多行。
- 多序列 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
Run Code Online (Sandbox Code Playgroud)
这与EdMorton 和Anubahuva的答案非常相似,但不同之处在于文件headers.txt可能只包含标头的一部分。
| 归档时间: |
|
| 查看次数: |
4809 次 |
| 最近记录: |