我有一个中等大小的fasta格式文件,它有一个复杂的标题。我需要根据另一个文件中的值(8位数字)拉出序列。我可以使用' grep -20" value"来获取序列。 fasta.file&#39 ;.一些序列非常大,我经常需要调整行数以获得整个序列。然后我必须复制并粘贴到另一个文件中。现在,我有太多的值(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:'加成。我认为它是冒号或因为标题包含可变的位置和长度。
非常感谢任何评论或帮助!
编辑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;
再次感谢!!
答案 0 :(得分:2)
$ awk '/transcript/ {f=0} /17818557/ {f=1} f==1{print}' 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
代码使用一个名为f
的标志来决定是否应该打印一行。逐个接受每个命令:
/transcript/ {f=0}
如果"成绩单"出现在行中,表示标题,我们将标记设置为0
。
/17818557/ {f=1}
如果该行包含我们的密钥17818557
,我们会将标记设置为1
f==1{print}
如果标记为1
,请打印该行。
答案 1 :(得分:1)
sed '1,/17818557/d;/>/,$d' file
输出:
GGATCATTGATGACCATAAAAGATGTGGGAGTCGTCTGAAACATGCATGATGACCACAAC
ATTGAGAGTCTGAGGTCCAC
使用标题:
id=17818557
sed "/$id/p;1,/$id/d;/>/,\$d" file
输出:
>transcript_cluster:RaGene-2_0-st-v1:17818557; Assembly=build-Rnor3.4/rn4; Seqname=chr6; Start=134300789; Stop=134300869; Strand=+; Length=80;
GGATCATTGATGACCATAAAAGATGTGGGAGTCGTCTGAAACATGCATGATGACCACAAC
ATTGAGAGTCTGAGGTCCAC