2014-01-16 49 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的棒。