如何使用序列ID(shell脚本)提取FASTA序列
我有下面的序列,它是fasta格式,带有序列头和它的核苷酸。 如何比较两个文件(Kcompare.pep和clade1i.txt)并提取具有相同序列头的序列? 有人能帮我吗 Kcompare.pep如何使用序列ID(shell脚本)提取FASTA序列,shell,fasta,Shell,Fasta,我有下面的序列,它是fasta格式,带有序列头和它的核苷酸。 如何比较两个文件(Kcompare.pep和clade1i.txt)并提取具有相同序列头的序列? 有人能帮我吗 Kcompare.pep >ztr:MYCGRDRAFT_45998 MAAPLHAEGPIRTPYTGVELLNTPYLNKGTAFPADERRVLGLTALLPTSVHTLDQQLQRA WHQYQSRDNDLARNTFLTSLKEQNEVLYYRLVLDHLSEVFSIIYTPTEGEAIQRYSSLFR >
>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上的许多解决方案:您也可以尝试使用。