Awk 将DNA序列转换成氨基酸

Awk 将DNA序列转换成氨基酸,awk,sed,tr,Awk,Sed,Tr,我正在尝试编写一个bash脚本,它能够从一个文件中读取DNA序列(文件中的每一行都是序列),其中序列由一个空行分隔。然后我要找到这些DNA序列在每个密码子上编码的氨基酸(每组三个文本)。例如,如果我有一个序列文件: GCATGCTGCGATACTTTGGCTGAATGGCTGAATGGCTGAATGCTGCGAAACTTTGGCTGAATTTGGCTG 然后从GCA(前三个字面值)开始,我想根据下表将DNA解码成氨基酸: Codon(s) Amino-acid

我正在尝试编写一个bash脚本,它能够从一个文件中读取DNA序列(文件中的每一行都是序列),其中序列由一个空行分隔。然后我要找到这些DNA序列在每个密码子上编码的氨基酸(每组三个文本)。例如,如果我有一个序列文件:

GCATGCTGCGATACTTTGGCTGAATGGCTGAATGGCTGAATGCTGCGAAACTTTGGCTGAATTTGGCTG

然后从GCA(前三个字面值)开始,我想根据下表将DNA解码成氨基酸:

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
进行替换。但是,伙计,这会很笨拙(可能不是很快)。我会尝试您的建议。再次感谢。