Awk 将DNA序列转换成氨基酸
我正在尝试编写一个bash脚本,它能够从一个文件中读取DNA序列(文件中的每一行都是序列),其中序列由一个空行分隔。然后我要找到这些DNA序列在每个密码子上编码的氨基酸(每组三个文本)。例如,如果我有一个序列文件: GCATGCTGCGATACTTTGGCTGAATGGCTGAATGGCTGAATGCTGCGAAACTTTGGCTGAATTTGGCTG 然后从GCA(前三个字面值)开始,我想根据下表将DNA解码成氨基酸:Awk 将DNA序列转换成氨基酸,awk,sed,tr,Awk,Sed,Tr,我正在尝试编写一个bash脚本,它能够从一个文件中读取DNA序列(文件中的每一行都是序列),其中序列由一个空行分隔。然后我要找到这些DNA序列在每个密码子上编码的氨基酸(每组三个文本)。例如,如果我有一个序列文件: GCATGCTGCGATACTTTGGCTGAATGGCTGAATGGCTGAATGCTGCGAAACTTTGGCTGAATTTGGCTG 然后从GCA(前三个字面值)开始,我想根据下表将DNA解码成氨基酸: Codon(s) Amino-acid
Codon(s) Amino-acid
TTT,TTC Phe
TTA,TTG,CTT,CTC,CTA,CTG Leu
ATT,ATC,ATA Ile
ATG Met
GTT,GTC,GTA,GTG Val
TCT,TCC,TCA,TCG Ser
CCT,CCC,CCA,CCG Pro
ACT,ACC,ACA,ACG Thr
GCT,GCC,GCA,GCG Ala
TAT,TAC Tyr
TAA,TAG Stop
CAT,CAC His
CAA,CAG Gln
AAT,AAC Asn
AAA,AAG Lys
GAT,GAC Asp
GAA,GAG Glu
TGT,TGC Cys
TGA Stop
TGG Trp
CGT,CGC,CGA,CGG Arg
AGT,AGC Ser
AGA,AGG Arg
GGT,GGC,GGA,GGG Gly
也就是说,我需要得到:
AlaCysCysAspAsnPheGlyStopThrLeuAlaGluAlaCysCysGluThrLeuAlaGluLeuTrpLeu
然后我需要打印每个氨基酸的名称和使用次数。例如:
Ala: 4
Cys: 4
等等。我有100多个包含DNA序列的文件,但我不太擅长bash。我尝试了awk和tr,但我不知道如何将表编码为bash脚本。嗯,这是一个有趣的练习:
#!/usr/bin/perl
use strict;
use warnings;
my %acid_of;
{
my $raw = <<'***';
TTT,TTC Phe
TTA,TTG,CTT,CTC,CTA,CTG Leu
ATT,ATC,ATA Ile
ATG Met
GTT,GTC,GTA,GTG Val
TCT,TCC,TCA,TCG Ser
CCT,CCC,CCA,CCG Pro
ACT,ACC,ACA,ACG Thr
GCT,GCC,GCA,GCG Ala
TAT,TAC Tyr
TAA,TAG Stop
CAT,CAC His
CAA,CAG Gln
AAT,AAC Asn
AAA,AAG Lys
GAT,GAC Asp
GAA,GAG Glu
TGT,TGC Cys
TGA Stop
TGG Trp
CGT,CGC,CGA,CGG Arg
AGT,AGC Ser
AGA,AGG Arg
GGT,GGC,GGA,GGG Gly
***
for my $line (split /\n/, $raw) {
my ($codons, $acid) = split ' ', $line;
for my $codon (split /,/, $codons) {
$acid_of{$codon} = $acid;
}
}
}
while (my $line = readline) {
next if $line !~ /\S/;
my %count;
$line =~ s{\G([ACGT]{3})}{
my $acid = $acid_of{$1};
$count{$acid}++;
$acid
}eg;
for my $acid (sort keys %count) {
$line .= "$acid: $count{$acid}\n";
}
} continue {
print $line;
}
#/usr/bin/perl
严格使用;
使用警告;
我的%酸量;
{
my$raw=如果shell脚本有bug会发生什么?它会导致三臂鱼吗?你能给我们看一下你迄今为止编写的代码吗?谢谢你的帮助。我不懂perl,我希望在bash中有一个脚本。在bash脚本中编码转换表是我的问题。@FaizLotfy为什么要使用bash?因为它是唯一的脚本语言e我知道。我已经在学习Python,但我现在可以使用bash。@FaizLotfy您可能可以使用循环重复提取变量的前三个字符,然后使用case
/esac
进行替换。但是,伙计,这会很笨拙(可能不是很快)。我会尝试您的建议。再次感谢。