如何在perl中将结果写入外部文件

时间:2013-06-06 10:39:00

标签: perl

我正在尝试从myu数据中读取一些特定的列到我的输出文件中,我一次成功读取一个cloumn但我想要一次读取一些我感兴趣的列(我有列的列表i)想要在一个单独的tex文件中提取)因为提取单个列并加入它们使一个单独的文件对我来说会变得忙乱,这里是我尝试提取单个coulmn的代码,

#!/usr/bin/perl
use strict;
use warnings;

open (DATA, "<file.txt") or die ("Unable to open file");
my $search_string = "IADC512444";

my $header = <DATA>;
my @header_titles = split /\t/, $header;
my $extract_col = 0;

for my $header_line (@header_titles) {
  last if $header_line =~ m/$search_string/;
  $extract_col++;
}

print "Extracting column $extract_col\n";

while ( my $row = <DATA> ) {
  last unless $row =~ /\S/;
  chomp $row;
  my @cells = split /\t/, $row;
  print "$cells[$extract_col] ";
}

有没有可能一次提取所有列,而不是只有IADC512444我想从我的文本文件到outfile到我的硬盘?请帮我解决这个问题, 感谢

1 个答案:

答案 0 :(得分:2)

如果需要将内容打印到磁盘上的文件,则应该以写入模式打开文件并写入文件。此外,如果您想要更多列,可以通过访问数组单元格中的相应元素来实现。在此示例中,我正在打印您正在打印的列以及第1列和第2列

open(OUT_FILE,">path_to_out_file") || die "cant open file...";
while ( my $row = <DATA> ) {
  last unless $row =~ /\S/;
  chomp $row;
  my @cells = split /\t/, $row;
  #print "$cells[$extract_col] ";
print OUT_FILE "$cells[$extract_col],$cells[1],$cells[2]\n";
}
close(OUT_FILE)

我已经稍微调整了一下代码以满足您的要求。 在变量req_hdr_string中,您应该说出您需要的列名, 因此它将被拆分并存储在哈希中。 然后从标题我得到列的位置,只打印那些

#!/usr/bin/perl
use strict;
use warnings;

open (DATA, "<h11.txt") or die ("Unable to open file");
my $req_hdr_string = "abc,ghi,mno,";
my %req_hdrs       = ();
my %extract_col    = ();
foreach(split /,/, $req_hdr_string)
{
    print "req hdr is:$_\n";
    $req_hdrs{$_} = $_;
}

my $index  = 0;
my $header = <DATA>;
chomp $header;
foreach (split /\t/, $header) 
{
    print "input is:|$_|\n";
    if(exists $req_hdrs{$_})
    {
        print "\treq index is:$index\n";
        $extract_col{$index} = 1;
    }
    $index++;
}

open(OUT_FILE,">out_file") || die "cant open file...";
while ( my $row = <DATA> ) 
{
    last unless $row =~ /\S/;
    chomp $row;
    my @cells = split /\t/, $row;
    foreach $index (sort keys%extract_col)
    {
        print OUT_FILE "$cells[$index],";
    }
    print OUT_FILE "\n";
}
close(OUT_FILE);
close(DATA);