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

如何使用序列ID(shell脚本)提取FASTA序列,shell,fasta,Shell,Fasta,我有下面的序列,它是fasta格式,带有序列头和它的核苷酸。 如何比较两个文件(Kcompare.pep和clade1i.txt)并提取具有相同序列头的序列? 有人能帮我吗 Kcompare.pep >ztr:MYCGRDRAFT_45998 MAAPLHAEGPIRTPYTGVELLNTPYLNKGTAFPADERRVLGLTALLPTSVHTLDQQLQRA WHQYQSRDNDLARNTFLTSLKEQNEVLYYRLVLDHLSEVFSIIYTPTEGEAIQRYSSLFR >

我有下面的序列,它是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
预期产出

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
用K表示i的
*
做
回声$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”'开始{while((getline k 0)i[k]=1}{gsub(^>”,“,”,$0);if(i[$1]){print“>”$1”\n“$2}>$i/firsti.pep
完成
使用以下方法:

while read l; do
  sed -n '/^>'"$l"'/,/^>|$/p' Kcompare.pep
done <clade1i.txt
读取时执行 sed-n'/^>“$l”/,/^>|$/p”Kcompare.pep 使用awk完成:

awk 'NR==FNR{a[">"$0];next}/^>/{f=0;}($0 in a)||f{print;f=1}' clade1i.txt Kcompare.pep
读取clade1i.txt文件并将其作为密钥存储在数组中。
阅读Kcompare.pep。对于以“>”开头的每一行,设置一个标志,并继续打印这些行,直到遇到以“>”开头的下一行。

循环文件并重新读取每一行的输入文件是一种常见的反模式。您可以轻松地将输入转换为单个
sed
脚本,然后在inpu上运行该脚本t文件。
sed的%.*%/^>&$/,/^>|$/p'clade1i.txt|sed-n-f-Kcompare.pep
biostars.org上的许多解决方案:您也可以尝试使用。