如何使用序列ID(shell脚本)提取FASTA序列

时间:2016-01-08 06:35:33

标签: shell fasta

我有以下序列,它们是具有序列标题及其核苷酸的fasta格式。 如何比较两个文件(Kcompare.pep和clade1i.txt)并使用相同的序列标题提取序列? 任何人都可以帮助我吗?

Kcompare.pep

>ztr:MYCGRDRAFT_45998
MAAPLHAEGPIRTPYTGVELLNTPYLNKGTAFPADERRVLGLTALLPTSVHTLDQQLQRA
WHQYQSRDNDLARNTFLTSLKEQNEVLYYRLVLDHLSEVFSIIYTPTEGEAIQRYSSLFR
>kal:KALB_5042
MTAEVAVVSDGSAIPGASPPATLPLLQDYAELVREHAGLSAVPLAVDSARLAAELCALPK
RFRAVFLTHTDPERAFQVQRAVAKAGGPLVITDQDTTAISLTASTLTTLARRGRSPSDSR

clade1i.txt

cpo:COPRO5265_0583
ble:BleG1_3845
kal:KALB_5042

预期输出

>kal:KALB_5042
MTAEVAVVSDGSAIPGASPPATLPLLQDYAELVREHAGLSAVPLAVDSARLAAELCALPK
RFRAVFLTHTDPERAFQVQRAVAKAGGPLVITDQDTTAISLTASTLTTLARRGRSPSDSR

我试图运行它,但没有出现错误或结果。

for i  in K*
   do
     echo $i

      awk -F ' ' '{print $1}' $i/$i.pep > Kcompare.pep
      mv Kcompare.pep $i

      awk -F '_' '{print $2":"$3"_"$4}' $i/firstClade.txt > $i/clade1i.txt
       awk 'NR==1{printf $0"\t";next}{printf /^>/ ? "\n"$0"\t" : $0}' $i/Kcompare.pep | awk -F"\t"  'BEGIN{while((getline k <"$i/clade1i.txt")>0)i[k]=1}{gsub("^>","",$0);if(i[$1]){print ">"$1"\n"$2}}' > $i/firsti.pep
    done

2 个答案:

答案 0 :(得分:1)

使用此:

while read l; do
  sed -n '/^>'"$l"'/,/^>|$/p' Kcompare.pep
done <clade1i.txt
  • while循环逐行循环遍历clade1i.txt文件。
  • sed -n禁止自动打印。
  • /regex/,/regex/匹配从第一个正则表达式到第二个正则表达式的所有内容。
  • p打印匹配的行。

答案 1 :(得分:1)

使用awk:

awk 'NR==FNR{a[">"$0];next}/^>/{f=0;}($0 in a)||f{print;f=1}' clade1i.txt Kcompare.pep

读取clade1i.txt文件并将其作为键存储在数组中。 阅读Kcompare.pep。对于以“&gt;”开头的每一行,设置一个标记,并继续打印行直到以“&gt;”开头的下一行遇到了。