perl批量替换字符

    技术2022-05-19  18

    替换文件中的字符

    将以下文件中的RF*****,

    >RF00001;5S_rRNA;DQ397844.1/16860-16979   414005:Cenarchaeum symbiosum B

    CAAGCCGGCCAUAGCGUCAGGGUGCGACCCAAUCCCAUUCCGAACUUGGA

    AGUCAAACCUGAUGUCGCUGUUGUGUUACUAAGAUGCGAGAGCUCUUGGG

    AAGCAACAGUGCUGGCAUCA

    >RF00001;5S_rRNA;BA000002.3/627792-627911   272557:Aeropyrum pernix K1

    GGCCCGGCCAUAGCGGCCGGGUAACACCCGGACUCAUUUCGAACCCGGAA

    GUUAAGCCGGCCGCGUUGGAGGCUCCAGUGGGGUCCGAGAGGCCCUGCAG

    GGGCCUCCAAGCCGGGGCCG

    >RF00001;5S_rRNA;CP001140.1/1163076-1163193   490899:Desulfurococcus kamchatkensis 1221n

    GACCCGGCCAUAGUGGCCGGGCAACACCCGGUCUCAUAUCGAACCCGGAA

    GUUAAGCCGGCCACGUCAGAGCGGCAGUGAGGUCCGAGAGGCCUCGCAGC

    CGCUCUGAGCUGGGAUCG

    替换为

    RF00001 RF00001;rRNA

    RF00002 RF00002;rRNA

    RF00177 RF00177;rRNA

    RF01118 RF01118;rRNA

    RF00003 RF00003;snRNA

    RF00004 RF00004;snRNA

    RF00007 RF00007;snRNA

    RF00012 RF00012;snRNA

    RF00015 RF00015;snRNA

    RF00016 RF00016;snRNA

    RF00020 RF00020;snRNA

    RF00026 RF00026;snRNA

    RF00045 RF00045;snRNA

    RF00046 RF00046;snRNA

    RF00049 RF00049;snRNA

     

    代码如下

    open(Fh,"1.list");

    @a = <Fh>;

    open(In1,"type.list");

    @b = <In1>;

    open(OU,">out.out");

     

    foreach (@b){

    my @lines = split m//s+/ ,$_;

    my $id = $lines[0];

    my $new_id = $lines[1];

    my $flag=0;

    foreach (@a){

    $line = $_;

    if ($line=~/^>/) 

    {

    if($line =~ /$id/){

    $line =~ s/$id/$new_id/;

    #print $lines,"/n";

    $flag=1;

    print OU $line;

    }

    else

    {

    $flag=0;

    }

    }

    elsif (($line!~/^>/) && ($flag eq 1))

    {

    print OU $line;

    }

    }

    }


    最新回复(0)