【发布时间】:2014-07-31 11:46:33
【问题描述】:
我有一个中等大小的 fasta 格式文件,它有一个复杂的标题。我需要根据另一个文件中的值(一个 8 位数字)提取一个序列。我可以使用 'grep -20 "value" fasta.file' 得到序列。有些序列非常大,我经常需要调整行数才能获得整个序列。然后我必须复制并粘贴到另一个文件中。现在,我有太多值(1000)无法手动执行此操作。我发现的工具到目前为止还没有工作......
fasta 格式文件如下所示:
>transcript_cluster:RaGene-2_0-st-v1:17818557; Assembly=build-Rnor3.4/rn4; Seqname=chr6; Start=134300789; Stop=134300869; Strand=+; Length=80;
GGATCATTGATGACCATAAAAGATGTGGGAGTCGTCTGAAACATGCATGATGACCACAAC
ATTGAGAGTCTGAGGTCCAC
>transcript_cluster:RaGene-2_0-st-v1:17818559; Assembly=build-Rnor3.4/rn4; Seqname=chr6; Start=134301675; Stop=134301762; Strand=+; Length=87;
GGATCATTGATGACCAAAAAAAAAAAAACATCTGGGAGTCCTCTGAGACATCCATGATGA
CCACAACATTGGGAGTCTGAGGTCCAC
如果我使用命令 grep -4 "17818557" fasta.fa 我得到:
ATTGCGAGTCTGAGGTCCAC
>transcript_cluster:RaGene-2_0-st-v1:17818555; Assembly=build-Rnor3.4/rn4; Seqname=chr6; Start=134299894; Stop=134299978; Strand=+; Length=84;
GGATCATTGATGACCAGAAAAAAATCATCTCGGAGTCCTCTGAGACATCCATGATGACCA
CAACATTGGGAGTCTGAGGTCCAC
>transcript_cluster:RaGene-2_0-st-v1:17818557; Assembly=build-Rnor3.4/rn4; Seqname=chr6; Start=134300789; Stop=134300869; Strand=+; Length=80;
GGATCATTGATGACCATAAAAGATGTGGGAGTCGTCTGAAACATGCATGATGACCACAAC
ATTGAGAGTCTGAGGTCCAC
>transcript_cluster:RaGene-2_0-st-v1:17818559; Assembly=build-Rnor3.4/rn4; Seqname=chr6; Start=134301675; Stop=134301762; Strand=+; Length=87;
GGATCATTGATGACCAAAAAAAAAAAAACATCTGGGAGTCCTCTGAGACATCCATGATGA
grep -4 抓取上下四行。我需要做的是使用数字查询并仅提取fasta标题(>)下方的序列数据。将 fasta 标头下方的序列收集到下一个 fasta 标头会很好,即从 > 到 >。
我尝试了一些 UCSC 工具 'faSomeRecord' 和一些 perl 脚本。他们没有使用列表文件或命令行中的数字查询,无论是否添加“transcript_cluster:RaGene-2_0-st-v1:”。我认为这是冒号,或者因为标题包含可变的位置和长度。
非常感谢任何 cmets 或帮助!
编辑 30July14
感谢我在这里得到的帮助。我能够使用这个 bash 脚本将数据从一个文件获取到另一个文件:
#!/usr/bin/bash
filename='21Feb14_list.txt'
filelines=`cat $filename`
for i in $filelines ; do
awk '/transcript/ && f==1 {f=0;next} /'"$i"'/ {f=1} f==1{print $1}' RaGene-2_0-st-v1.rn4.transcript_cluster.fa
done
这会提取序列,但会将数据截断为通配符值。有没有办法修改它,以便我可以获得整个标题?
示例输出:
>transcript_cluster:RaGene-2_0-st-v1:17719499;
ATGCCTGAGCCTTCGAAATCTGCACCAGCTCCTAAGAAGGGCTCTAAGAAAGCTATCTCT
AAAGCTCAGAAAAAGGATGGCAAGAAGCGCAAGCGTAGCCGCAAGGAGAGCTATTCCGTG
TACGTGTACAAGGTGCTGAAGCAAGTGCACCCGGACACCGGCATCTCTTCCAAGGCCATG
GGCATCATGAACTCGTTCGTGAACGACATCTTCGAGCGCATCGCGGGCGAGGCGTCGCGC
CTGGCGCATTACAACAAGCGCTCGACCATCACGTCCCGGGAGATCCAGACCGCCGTGCGC
CTGCTGCTGCCGGGGGAGCTGGCCAAGCACGCGGTGTCGGAAGGCACCAAGGCGGTCACC
AAGTACACCAGCTCCAAGTG
>transcript_cluster:RaGene-2_0-st-v1:17623679;
再次感谢!!
【问题讨论】:
-
你的意思是像
grep表示“17818557”,然后将标题从一个“>”打印到下一个“>”,其中包含“17818557”? -
是的。如果能够抓取从标题到下一个标题开头的所有序列,那就太好了。标题总是以'>'开头
-
赛勒斯的回答对你有用吗?还是您希望在该输出之前包含标题?请在您的原始问题中给出一个期望输出的示例
-
>transcript_cluster:RaGene-2_0-st-v1:17818557;组装=构建-Rnor3.4/rn4;序列名=chr6;开始=134300789;停止=134300869;链=+;长度=80; GGATCATTGATGACCATAAAAGATGTGGGAGTCGTCTGAAACATGCATGATGACCACAAC ATTGAGAGTCTGAGGTCCAC
-
grep -A3 "17818557"是否有效,或者您是否已经尝试过?