perl實(shí)戰(zhàn)練習(xí)-計(jì)算fastq文件中每條序列的GC含量

計(jì)算FASTA文件中每條序列的長(zhǎng)度
輸入文件fasta.txt

>con1
GTTCATAACTTACCATTGACTGTTCATGATTTAAACTGTGTCTTCCTGTTCTTTTAGTTGCTTTGGATACTATAAGGTCAGAACTAGAA
>con2
GGGACCAGGTGGGAAGCTGCTGCTTTCTTTTCCCTTTTGGTCTTCTTGGGCCCACCCTTCAGCTTCTGCTTTTCTTCATCTTCTCGGTTTTGAGGCCAGGAGGCAGCCAGTATCCTGGCCGCTTCTGCTTGAGAGCTGGTCCCCTCCTCT
>con3
TCCAGAGCCAGTTCCCTGACGATGCCGAGGTTTACCGGCTCATCGAGGTGACTGGCCTTGCCAGGAGCGAGATCAAGAAGTGGTTCAGTGACCACCGATATCGGTGTCAAAGGGGCATCGTCCACATCACCAG
>con4
TTTTCCTCCAAGTGTACAAGACTGATCTGGAGAAGGACATTATTTCGGACACATCTGGTGACTTCCGCA
>con5
GTTTGCATCGTCATCCAATTTTTTTTCATATGCCCCAAACCCATTCAATTTCTGATTGTGTTGTGTTCCCTGGTGTAAGATATCTCCCAGGAGAGGGCCACACATTCCCCAGAGGTGGACCTTCTTGGTACATACACC

?
?
?
?
?
?
?
?
?
?
?
?

自己寫腳本

#!/usr/bin/perl
my ($f,$out)=@ARGV;
open(DATA,$f) or die "infile 文件無(wú)法打開(kāi),$f";
open(OUT,">$out")||die $!;
$/=">";<DATA>; #設(shè)置輸入記錄分隔符為">",并去除第一個(gè)">"
while(<DATA>){
    $line=$_;
    my $id=$1 if($line=~/^(\S+)/); #獲取序列ID
    chomp $line; #去掉末尾的換行
    $line=~s/^.+?\n//; #刪除第一行
    $line=~s/\s//g; #刪除序列中的空白字符
    my $gc = () = /G/g;
    my $cc = () = /C/g;
    my $len=length($line); #計(jì)算序列長(zhǎng)度
    my $gcc=($gc+$cc)/$len;
    print OUT "$id\t$gcc\n"; #輸出結(jié)果到輸出文件中
}
close IN;
close OUT;

網(wǎng)上其他答案

#!/usr/bin/perl -w
use strict;
unless (@ARGV==2){ #@ARGV 傳給腳本的命令行參數(shù)列表
     die"Usage: perl $0 <input.fa><out.gc>\n"; #當(dāng)命令行參數(shù)不是2的時(shí)候輸出使用說(shuō)明
}
my ($infile,$outfile)=@ARGV; #把命名行參數(shù)賦值給輸入、輸出文件
open IN,$infile||die"error:can't open infile:$infile"; #打開(kāi)輸入文件句炳IN
open OUT,">$outfile"||die $!; #打開(kāi)輸出文件句柄OUT
$/=">";<IN>; #設(shè)置輸入記錄分隔符為 ">",并去除第一個(gè)”>"
while (<IN>){ #$_=<IN>,把序列ID行和序列賦值給$_,$_=可以省略不寫
    my $id=$1 if(^/(\S+)/); #獲取序列ID
    chomp; #去掉末尾換行符
    s/^.+?\n//; #刪除第一行
    s/\s//g; # 刪除序列中的空白字符
    my $GC=(tr/GC/GC/);#計(jì)算G或C堿基個(gè)數(shù)
    my $AT=(tr/AT/AT/); #計(jì)算A或T堿基個(gè)數(shù)
    my $len=$GC+$AT; # 計(jì)算序列非N長(zhǎng)度
    my $gc_cont = $len ? $GC/$len :0 ; #計(jì)算GC含量,如果長(zhǎng)度為0,GC含量為0
    print OUT "$id\t$gc_cont\n"; #輸出結(jié)果到輸出文件
}
close IN;
close OUT;

自己寫的還是會(huì)有欠缺,沒(méi)有考慮GC為0的情況,還分別計(jì)算了G 和C的個(gè)數(shù),然后相加,完全可以用(tr/GC/GC/)來(lái)計(jì)算。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容