帮助解析perl中的选项卡文件和自定义格式

时间:2011-08-18 04:41:49

标签: perl

我有一个\t分隔的输出文件:

Data for 08/10/2011 
Host    QueueName   Queue-id    
test    123 Test Q  110
test    456 Test Q  120
test    789 Test Q  130

我想删除第一行(日期),然后我想要第二行(标题列) 使用像我的最终输出文件这样的值打印出来:

Host=test QueueName=123 Test Q Queue-id=110
Host=test QueueName=456 Test Q Queue-id=120
Host=test QueueName=789 Test Q Queue-id=130

在perl中执行此操作的好方法/做法是什么?

1 个答案:

答案 0 :(得分:2)

我建议Text::CSV_XS阅读该文件。

在最近的这个问题中,存在类似的问题:How can I use Perl extract a particular column from a tab-separated file?(参见我的回答)

use warnings;
use strict;
use Text::CSV_XS;
use autodie;

my $csv = Text::CSV_XS->new( { sep_char => "\t" } );
<DATA>;  # discard the first line
$csv->column_names ($csv->getline (*DATA));
my $hr = $csv->getline_hr_all(*DATA); 

for my $hashref (@$hr) {
    my @list;
    for my $key ($csv->column_names()) {
        push @list, join '=', $key, $hashref->{$key};
    }
    print "@list\n";
}
__DATA__
Data for 08/10/2011 
Host    QueueName   Queue-id    
test    123 Test Q  110
test    456 Test Q  120
test    789 Test Q  130