免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5010 | 回复: 5
打印 上一主题 下一主题

perl 如何批量同时将处理结果写入不同的文件~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-14 20:17 |只看该作者 |倒序浏览
本帖最后由 linghu002127 于 2011-10-16 20:44 编辑

又要麻烦各位了,实在也是搞了好久没搞定~~

帖子新手求助:如何提取相同文件名的数据行并存入相应文件~~

对于问题1,我手上有快100个这样的文件(文件格式*.bed),
我想批量处理他们,都进行相同的操作:就是在每个文件的第4,5列之间插入一列字符 '0’.
每个文件数据都是:


chr10 42963917 42963941 U0 -
chr4 70445617 70445641 U0 +
chr2 156399713 156399737 U0 -
chr4 77168812 77168836 U0 -
chr2 229229269 229229293 U0 +
chr3 137227198 137227222 U0 +
chrX 131453155 131453179 U0 +
chr2 203485084 203485108 U0 -
.............


处理后为:

chr10 42963917 42963941 U0 0 -
chr4 70445617 70445641 U0 0 +
chr2 156399713 156399737 U0 0 -
chr4 77168812 77168836 U0 0 -
chr2 229229269 229229293 U0 0 +
chr3 137227198 137227222 U0 0 +
chrX 131453155 131453179 U0 0 +
chr2 203485084 203485108 U0 0 -
................

自己写的代码如下:
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. while (my $filename = glob 'D:\data\tem1\*.bed') {
  5.      #原始文件存在tem1文件夹下
  6.   open (FILE,"$filename")or die $!;
  7.    open (OUT, '+>','D:\data\tem2'.$filename)or die $!;
  8.    #处理结果文件存在tem2文件夹下,文件名对应相同
  9.   #while部分对数据进行处理
  10.   while (<FILE>){                 
  11.    chomp;   
  12.    my @items = split("\t",$_);      
  13.    my $str=join("\t",@items[0..3],"0",$items[4]);      
  14.    print OUT "$str\n";
  15.    }
  16.       
  17.    close FILE;
  18.    close OUT;
  19.    
  20. }
复制代码
但是一直得不到想要的结果,不是报错就是无输出,怎么改都不行~~

论坛徽章:
0
2 [报告]
发表于 2011-10-14 20:57 |只看该作者
本帖最后由 Perlvim 于 2011-10-14 20:59 编辑
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. while (my $filename = glob "D:\data\tem1\*.bed" ) { #文件在tem1文件夹下

  5.    open (FILE,"$filename")or die $!;
  6.    open (OUT, '+>','D:\data\tem2'.$filename)or die $!;
  7.    #处理结果存在tem1文件夹下,文件名对应相同
  8.    #while部分对数据进行处理
  9.    while (<FILE>){
  10.    s/([+-])$/0\t$1/;
  11.    print OUT $_;
  12.    }
  13.       
  14.    close FILE;
  15.    close OUT;
  16.    
  17. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-10-15 10:54 |只看该作者
回复 2# Perlvim


    为什么执行时出现Unrecognized escape \w passed through at...while一行?这是什么原因啊?多谢~

论坛徽章:
0
4 [报告]
发表于 2011-10-15 10:59 |只看该作者
你的数据有问题,不是所有的行都是指定的格式。

论坛徽章:
0
5 [报告]
发表于 2011-10-15 11:08 |只看该作者
回复 4# Perlvim


    what mean? 不明白啊

论坛徽章:
0
6 [报告]
发表于 2011-10-16 20:53 |只看该作者
本帖最后由 linghu002127 于 2011-10-16 20:54 编辑

回复 2# Perlvim


    open (OUT, '+>','D:\data\tem2'.$filename)or die $!;
报告说非法.还是没有输出,求正解呀~~~

部分数据如附件所示

dada.rar

165.44 KB, 下载次数: 42

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP