搜索
查看: 3744|回复: 2

【Panda姐-perl练习题5】将fasta文件中的序列一行转为多行

[复制链接]

58

主题

103

帖子

756

积分

版主

Rank: 7Rank: 7Rank: 7

积分
756
QQ
发表于 2016-8-28 15:27:57 | 显示全部楼层 |阅读模式
本帖最后由 Panda姐 于 2016-8-30 19:05 编辑

题目:
格式化Fasta文件,在 wiki 上熟悉 Fasta 格式文件,编写perl脚本,将 7002_plasmid.fasta 转换为可视化更好的形式,序列每行输出70个碱基,结果文件示例如 example.fasta。
解题思路:
利用substr操作子字符串和for控制结构格式化输出序列文件。
代码记录:
  
[Perl] 纯文本查看 复制代码
#!usr/bin/perl
use strict;
open INPUT,"7002_plasmid.fasta";
open OUTPUT,">result.txt";
my(@input,$input,$output,$len,$star);
@input=<INPUT>;
foreach $input(@input){
   chomp($input);
if($input=~/>/){
   print OUTPUT "$input\n";
}else{
$len=length($input);
      for($star=0;$star<$len;$star+=70){
          $output=substr($input,$star,70);
          print OUTPUT "$output\n";
          } 
     }
}




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x



上一篇:【Panda姐-perl练习题4】统计给定序列在基因组上出现的次数
下一篇:【Panda姐-perl练习题6】统计两个文件的共有及特有内容
回复

使用道具 举报

0

主题

9

帖子

97

积分

注册会员

Rank: 2

积分
97
发表于 2016-10-4 03:37:58 | 显示全部楼层
用unpack 也挺简单的

my @multiline = unpack("(A70)*", $line)
回复 支持 反对

使用道具 举报

4

主题

23

帖子

628

积分

高级会员

Rank: 4

积分
628
发表于 2017-12-14 16:06:49 | 显示全部楼层
#!/usr/bin/perl -w
use strict;
die "Usage: perl $0 file.fa \n" unless(@ARGV==1);
open FA,"$ARGV[0]";
$/='>';
<FA>;
while(<FA>){
    chomp;#chomp use to '>'
    my ($id,$seq)=(split /\n/,$_,2)[0,1];
    $seq=~ s/\n//g;
    $seq=~ s/(\w{70})/$1\n/g;
    print ">",$id,"\n",$seq;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-8-24 22:29 , Processed in 0.083113 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.