设为首页收藏本站
开启辅助访问
切换到窄版

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4088|回复: 4

对FASTA格式的简单处理与统计的Perl程序

[复制链接]
发表于 2011-8-7 13:03:59 | 显示全部楼层 |阅读模式
  • 功能
1.格式化FASTA文件。
2.反向互补FASTA序列。
3.获取FASTA序列的长度。
4.计算GC含量并对ATGC计数。
5.搜索模式(子序列、motif等)。
  • 改进
1.添加了GC含量的计算和ATGC的计数。
2.扩展了search功能(得益于Perl的正则表达式)。
  • 不足
没有网页界面。
(有熟悉perl与网页编程的朋友可以改写一下:只要在浏览器中打开就可以使用)
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. use Getopt::Std;
  5. use Bio::SeqIO;

  6. &main;
  7. exit;

  8. sub main {
  9.     &usage if ( @ARGV < 1 );
  10.     my $command  = shift(@ARGV);
  11.     my %function = (
  12.         format  => \&format,
  13.         revcom  => \&revcom,
  14.         length  => \&length,
  15.         content => \&content,
  16.         search  => \&search
  17.     );
  18.     die("Unknown command \"$command\".\n")
  19.       if ( !defined( $function{$command} ) );
  20.     &{ $function{$command} };
  21. }

  22. sub format {
  23.     my %opts = ( w => 60 );
  24.     getopts( 'i:o:w:', \%opts );
  25.     die(
  26.         qq/
  27. Usage:    seqTools.pl format [options]

  28. Options:  -i STR   Input file in FASTA format.
  29.           -o STR   Output file in FASTA format.
  30.           -w INT   The line width for FASTA output. [$opts{w}]
  31. \n/
  32.     ) unless ( exists $opts{i} && exists $opts{o} );

  33.     my ( $fi, $fo, $width ) = ( $opts{i}, $opts{o}, $opts{w} );
  34.     my $in  = Bio::SeqIO->new( -file => "$fi",  -format => 'fasta' );
  35.     my $out = Bio::SeqIO->new( -file => ">$fo", -format => 'fasta' );
  36.     while ( my $seq = $in->next_seq() ) {
  37.         $out->width($width);
  38.         $out->write_seq($seq);
  39.     }
  40. }

  41. sub revcom {
  42.     my %opts = ( w => 60 );
  43.     getopts( 'i:o:', \%opts );
  44.     die(
  45.         qq/
  46. Usage:    seqTools.pl revcom [options]

  47. Options:  -i STR   Input file in FASTA format.
  48.           -o STR   Output file in FASTA format.
  49.           -w INT   The line width for FASTA output. [$opts{w}]
  50. \n/
  51.     ) unless ( exists $opts{i} && exists $opts{o} );

  52.     my ( $fi, $fo, $width ) = ( $opts{i}, $opts{o}, $opts{w} );
  53.     my $in  = Bio::SeqIO->new( -file => "$fi",  -format => 'fasta' );
  54.     my $out = Bio::SeqIO->new( -file => ">$fo", -format => 'fasta' );
  55.     while ( my $seq = $in->next_seq() ) {
  56.         my $rc_seq = $seq->revcom;
  57.         $out->width($width);
  58.         $out->write_seq($rc_seq);
  59.     }
  60. }

  61. sub length {
  62.     my %opts;
  63.     getopts( 'i:', \%opts );
  64.     die(
  65.         qq/
  66. Usage:    seqTools.pl length [options]

  67. Options:  -i STR   Input file in FASTA format.
  68. \n/
  69.     ) unless ( exists $opts{i} );

  70.     my $fi = $opts{i};
  71.     my $in = Bio::SeqIO->new( -file => "$fi", -format => 'fasta' );
  72.     while ( my $seq = $in->next_seq() ) {
  73.         print $seq->id, "\t", $seq->length, "\n";
  74.     }
  75. }

  76. sub content {
  77.     my %opts;
  78.     getopts( 'i:p:', \%opts );
  79.     die(
  80.         qq/
  81. Usage:    seqTools.pl content [options]

  82. Options:  -i STR   Input file in FASTA format.
  83. \n/
  84.     ) unless ( exists $opts{i} );

  85.     my $fi = $opts{i};
  86.     my $in = Bio::SeqIO->new( -file => "$fi", -format => 'fasta' );
  87.     while ( my $seq = $in->next_seq() ) {
  88.         print $seq->id, "\t";
  89.         my $length   = $seq->length;
  90.         my $sequence = $seq->seq;
  91.         my $num_a    = $sequence =~ tr/A//;
  92.         my $num_c    = $sequence =~ tr/C//;
  93.         my $num_g    = $sequence =~ tr/G//;
  94.         my $num_t    = $sequence =~ tr/T//;
  95.         my $num_o    = $length - $num_a - $num_c - $num_g - $num_t;
  96.         my $gc       = sprintf( "%.2f", ( $num_c + $num_g ) / $length * 100 );
  97.         print
  98. "Length=$length\tGC=${gc}%\tA=$num_a,C=$num_c,G=$num_g,T=$num_t,Others=$num_o\n";
  99.     }
  100. }

  101. sub search {
  102.     my %opts;
  103.     getopts( 'i:p:', \%opts );
  104.     die(
  105.         qq/
  106. Usage:    seqTools.pl search [options]

  107. Options:  -i STR   Input file in FASTA format.
  108.           -p STR   Pattern you want to search.

  109. Notes:    1. You can use RegExp supported by Perl.
  110.           2. It uses case-sensitive mode.
  111. \n/
  112.     ) unless ( exists $opts{i} && $opts{p} );

  113.     my ( $fi, $pattern ) = ( $opts{i}, $opts{p} );
  114.     my $in = Bio::SeqIO->new( -file => "$fi", -format => 'fasta' );
  115.     while ( my $seq = $in->next_seq() ) {
  116.         print $seq->id, "\t";
  117.         my @starts;
  118.         my $sequence = $seq->seq;
  119.         while ( $sequence =~ m/($pattern)/g ) {
  120.             my $start = pos($sequence) - CORE::length($1) + 1;
  121.             pos($sequence) = $start;
  122.             push @starts, $start;
  123.         }
  124.         my $num = @starts;
  125.         my $str = join ",", @starts;
  126.         print "$num\t$str\n";
  127.     }
  128. }

  129. sub usage {
  130.     die(
  131.         qq/
  132. Usage:   seqTools.pl  []\n
  133. Command: format   Format the FASTA record(s).
  134.          revcom   Reverse and complement the FASTA record(s).
  135.          length   Get the length of FASTA record(s).
  136.          content  Calculate the GC content of FASTA record(s).
  137.          search   Find subseq in the FASTA record(s).

  138. Author:  Yixf, yixf1986\@gmail.com
  139. Version: 20110601
  140. Notes:  1. A similar webtool developed by lh3: http:\/\/lh3lh3.users.sourceforge.net\/fasta.shtml
  141.         2. When you search, you can use RegExp supported by Perl.
  142.         3. The search function use case-sensitive mode.
  143. \n/
  144.     );
  145. }
复制代码
转自:云生物
发表于 2011-8-20 22:09:22 | 显示全部楼层
对FASTA格式的简单处理与统计的Perl!
yixf大侠的杰作!
这个可以有(⊙v⊙)嗯
发表于 2012-7-19 08:45:00 | 显示全部楼层
长期供应日用品批发Q750195667
以下产品100件起批
立白洗衣粉/256g/20袋/件¥14元
低泡洗衣粉/400g/20袋/件¥20元
无磷洗衣粉/300g/20袋/件¥20元
立白洗衣粉/508g/16袋/件¥24元
冷水洗衣粉/508g/16袋/件¥24元
除菌洗衣粉1200g/06袋/件¥21元
超洁洗衣粉1360g/06袋/件¥24元
冷水洗衣粉1500g/06袋/件¥30元
超洁洗衣粉1800g/06袋/件¥30元
立白洗衣粉2480g/06袋/件¥36元
加香洗衣粉2800g/06袋/件¥42元
加香洗衣粉2800g/06袋/件¥42元
桶装洗衣粉1800g/06袋/件¥36元
*桶装洗衣粉900g/12袋/件¥36元
*立白洗洁精500g/28瓶/件¥28元
木瓜洗洁精1680g/08瓶/件¥36元
立白洗洁精2000g/08瓶/件¥40元
***立白肥皂238g/60块/件¥70元
品牌:汰渍
柠檬洗衣粉/560g/12袋/件¥20元
柠檬洗衣粉/1550g/6袋/件¥36元
柠檬洗衣粉/1700g/6袋/件¥39元
清香洗衣粉/260g/20袋/件¥23元
精华洗衣粉/2800g/6袋/件¥30元
精华洗衣粉/1800g/6袋/件¥24元
全能洗衣粉/1800g/6袋/件¥42元
全能洗衣粉/1100g/6袋/件¥24元
无磷洗衣粉/1360g/6袋/件¥24元
无磷洗衣粉/1800g/6袋/件¥30元
无磷洗衣粉/508g/16袋/件¥24元
发表于 2012-11-22 19:05:25 | 显示全部楼层
你好!拜读了你关于基因组分析流程的帖子后,收益不浅呀,小弟正在做这方面工作,最近需要用perl脚本处理一些简单的fasta文件,初学还不会写,希望大神多多帮忙呀!谢谢!我的邮箱:vtefnfqp@163.com,若可以,希望联系。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|生物信息学论坛 ( 蜀ICP备09031721号  

GMT+8, 2017-1-19 02:20 , Processed in 0.100827 second(s), 20 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表