免费注册 查看新帖 |

Chinaunix

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

再问一个文本处理的问题!谢谢几位啦! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-26 14:32 |只看该作者 |倒序浏览
#@        2492        NA20349        0        0        1        0        ASW
#@        2494        NA20357        0        0        2        0        ASW
#@        2494        NA20356        0        0        1        0        ASW
#@        2495        NA20359        0        0        2        0        ASW
#@        2496        NA20363        0        0        2        0        ASW
rs# alleles chrom pos strand assembly# center protLSID assayLSID panelLSID QCcode NA19625 NA19700 NA19701
rs7235612 A/G chr18 1543 + ncbi_b36 broad urn:LSID:affymetrix.orgrotocol:GenomeWideSNP_6.0:3 urn:LSID
rs10853286 A/G chr18 2842 + ncbi_b36 sanger urn:LSID:illumina.orgrotocol:Human_1M_BeadChip:3 urn:LSID
。。。。
。。。。
。。。。
再问一个弱弱的问题,我有如上的一个数据,其中#@开头和rs#开头的行可看做表头,需要对表头以下的数据进行分割,具体分割不用管,想生成多个分割的小文件,其中表头都与大文件的表头一样,perl语句应该怎么写啊?想了几天了。。。
谢谢了!

[ 本帖最后由 yn521yn 于 2009-9-26 14:34 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-09-26 16:53 |只看该作者
你的描述感觉不太清楚哦
你指的数据分隔是按行分隔,还是按列分隔?
“其中表头都与大文件的表头一样”哪个大文件,没看懂

论坛徽章:
0
3 [报告]
发表于 2009-09-26 17:30 |只看该作者
很简单啊 思路就是 吧表头的文件全部读出来 放到一个数组里面去

如果是每一行的话
然在读文件的时候 不是表头的行 每一行 就print一次这个数组+本身这一行 到一个文件

你也没说具体需求....反正思路是这样

论坛徽章:
0
4 [报告]
发表于 2009-09-26 17:51 |只看该作者

  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. my @data = <DATA>;
  5. my @array;
  6. foreach (@data) {
  7.     chomp;
  8.     push @array, $_ if (/^\#\@/);
  9.     push @array, $_ if (/^rs\#/);
  10. }

  11. foreach (@data) {
  12.     chomp;
  13.     if (!/^\#\@/) {
  14.         if (!/^rs\#/) {
  15.             foreach my $head (@array) {
  16.                 print "$head\n";
  17.             }
  18.             print "$_\n\n\n\n";
  19.         }
  20.     }
  21. }


  22. __DATA__
  23. #@        2492        NA20349        0        0        1        0        ASW
  24. #@        2494        NA20357        0        0        2        0        ASW
  25. #@        2494        NA20356        0        0        1        0        ASW
  26. #@        2495        NA20359        0        0        2        0        ASW
  27. #@        2496        NA20363        0        0        2        0        ASW
  28. rs# alleles chrom pos strand assembly# center protLSID assayLSID panelLSID QCcode NA19625 NA19700 NA19701
  29. rs7235612 A/G chr18 1543 + ncbi_b36 broad urn:LSID:affymetrix.orgrotocol:GenomeWideSNP_6.0:3 urn:LSID
  30. rs10853286 A/G chr18 2842 + ncbi_b36 sanger urn:LSID:illumina.orgrotocol:Human_1M_BeadChip:3 urn:LSID
复制代码


结果

  1. Press ENTER or type command to continue
  2. #@        2492        NA20349        0        0        1        0        ASW
  3. #@        2494        NA20357        0        0        2        0        ASW
  4. #@        2494        NA20356        0        0        1        0        ASW
  5. #@        2495        NA20359        0        0        2        0        ASW
  6. #@        2496        NA20363        0        0        2        0        ASW
  7. rs# alleles chrom pos strand assembly# center protLSID assayLSID panelLSID QCcode NA19625 NA19700 NA19701
  8. rs7235612 A/G chr18 1543 + ncbi_b36 broad urn:LSID:affymetrix.orgrotocol:GenomeWideSNP_6.0:3 urn:LSID



  9. #@        2492        NA20349        0        0        1        0        ASW
  10. #@        2494        NA20357        0        0        2        0        ASW
  11. #@        2494        NA20356        0        0        1        0        ASW
  12. #@        2495        NA20359        0        0        2        0        ASW
  13. #@        2496        NA20363        0        0        2        0        ASW
  14. rs# alleles chrom pos strand assembly# center protLSID assayLSID panelLSID QCcode NA19625 NA19700 NA19701
  15. rs10853286 A/G chr18 2842 + ncbi_b36 sanger urn:LSID:illumina.orgrotocol:Human_1M_BeadChip:3 urn:LSID
复制代码

改成写文件就可以了

论坛徽章:
0
5 [报告]
发表于 2009-09-26 18:32 |只看该作者

回复 #2 冰雪兰心 的帖子

按行分割的,大文件就是原文件。

论坛徽章:
0
6 [报告]
发表于 2009-10-16 15:22 |只看该作者

回复 #1 yn521yn 的帖子

这样子应该可以吧
#!/usr/local/bin/perl -w
use warnings;
use strict;

open(IN,"infile";

my $i = 0;
while(<IN>
{
  if( $_ =~ /^#@/ || $_ =~ /^rs#/ )
  {
    open(OUT,">outfile$i";
    print $_ OUT;
    $i++;
  }
  else
  {
    print $_ OUT;
  }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP