【问题标题】:How can I extract columns in perl and put into separate files?如何在 perl 中提取列并放入单独的文件中?
【发布时间】:2013-11-05 11:40:21
【问题描述】:

我有以下数据由制表符分隔的双列数据组成,尽管前三列不是每个双列的一部分:

Name    Type    Pos HX-20_4218.txt.Geo A Position   HX-20_4218.txt.Geo B Position   HX-474_3712.txt.Geo A Position  HX-474_3712.txt.Geo B Position  HX-549_3943.txt.Geo A Position  HX-549_3943.txt.Geo B Position
A-2345252   1   5   0.3574  0.9796  0.3178  0.9641  0.5564  1.0000
A-1969580   1   7   -0.3777 1.0000  -0.6987 1.0000  0.1007  0.9696
....

我需要从中提取信息以提供以下制表符分隔的输出:

第一个文件:HX-20.txt

Name    Type    Pos HX-20_4218.txt.Geo A Position   HX-20_4218.txt.Geo B Position
A-2345252   1   5   0.3574  0.9796
A-1969580   1   7   -0.3777 1.0000
....

第二个文件:HX-474.txt

Name    Type    Pos HX-474_3712.txt.Geo A Position  HX-474_3712.txt.Geo B Position
A-2345252   1   5   0.3178  0.9641
A-1969580   1   7   -0.6987 1.0000
....

第三个文件:HX-549.txt

Name    Type    Pos HX-549_3943.txt.Geo A Position  HX-549_3943.txt.Geo B Position
A-2345252   1   5   0.5564  1.0000
A-1969580   1   7   0.1007  0.9696
....

如何用 perl 做到这一点?

【问题讨论】:

  • 也许你应该解释一下你的输入是什么。我假设制表符分隔的数据,双列?

标签: perl


【解决方案1】:

我会这样做:

open my $in, '<', $filein or die $!
open my $out1, '>', $fileout1 or die $!
open my $out2, '>', $fileout2 or die $!
open my $out3, '>', $fileout3 or die $!

while(<$in>) {
    chomp;
    my @cols = split(/\t/, $_);
    my $line1 = join("\t", (@cols)[0..4]);
    my $line2 = join("\t", (@cols)[0..2,5,6]);
    my $line3 = join("\t", (@cols)[0..2,7,8]);
    print $out1 $line1,"\n";
    print $out2 $line2,"\n";
    print $out3 $line3,"\n";
}

【讨论】:

  • 输出文件句柄的模式错误。
  • 如何将其推广到多个列并相应地吐出多个文件的情况。另外(很抱歉完全缺乏 Perl 知识)但是我怎样才能使 $filein 成为脚本的参数。另外,这是否意味着我必须手动提供 $fileout 的名称。我不想那样做。我希望能够使用部分列标题来命名输出文件。例如HX-20.txt 来自HX-20_4218.txt.Geo A Position HX-20_4218.txt.Geo B Position 的前两列
猜你喜欢
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2021-04-29
  • 2017-08-15
  • 2011-06-26
相关资源
最近更新 更多