2014-01-16 31 views
1

目前我试图解析以下文件类型(.fasta):grep的整个输出搜索到的文件

>SeqID=0001__GroupID=0001 
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 
>SeqID=0002__GroupID=0001 
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 
>SeqID=0003__GroupID=0002 
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 
>SeqID=0004__GroupID=0003 
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 
>SeqID=0005__GroupID=0003 
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 
>SeqID=0006__GroupID=0004 
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 

为了可以通过组ID中提取的序列。我有ID的文件以下列格式来提取:

GroupID=0002 
GroupID=0003 
我已经使用下面的命令

$ grep -A 1 -f groupIDs_to_extract.txt sequences_file.fasta > output.txt 

这个想法是在输入与每个ID来执行的grep文本文件,其中包含以下一行上下文以实际提取序列。所以,从我的例子中,输出从第2组和第3的所有序列:

>SeqID=0003__GroupID=0002 
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 
>SeqID=0004__GroupID=0003 
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 
>SeqID=0005__GroupID=0003 
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 

然而,它只是在输出年底整个sequences_file.fasta,我不知道为什么。谁能帮忙?

+0

你的'grep'二进制文件是否支持'grep -A 1'? – fedorqui

+1

'groupIDs_to_extract.txt'中可能有空行(很可能在文件末尾)。空行代表“匹配所有内容”。 –

+1

我意识到我的文件没有按照我的想法格式化(请参阅我的答案)。但是,是的,我的'groupIDs_to_extract.txt'中确实有空行。只有我解决了这两个问题后才能正常工作,所以谢谢! – Arthis

回答

1

原来我的文件实际上是格式如下:

>SeqID=0001__GroupID=0001 ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 
>SeqID=0002__GroupID=0001 ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 
>SeqID=0003__GroupID=0002 ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 
>SeqID=0004__GroupID=0003 ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC 

我没有注意到我的文本编辑器(gedit中)包裹的文本,所以它看起来像一个正常的.fasta文件。

我用正则表达式find + replace来添加换行符来正确格式化,现在grep按预期工作。

顺便说一句,我改变了命令的末尾:

$ grep -A 1 -f groupIDs_to_extract.txt sequences_file.fasta | grep -v "\--" > output.txt 

所以它删除了 - 如果您使用上下文命令grep的棒。