我想要做的是将元素[1..3]组合成一个数组,然后将其中的内容组合起来。然后按键排序并打印出整个内容。
#!/usr/bin/perl
my %hash ;
while ( <> ) {
@elements = split /,/, $_;
@slice_elements = @elements[1..3] ;
if ($elements[0] ne '' ) {
$hash{ $elements[0] } = $slice_elements[0];
}
}
foreach $key (sort keys %hash ) {
print "$key; $hash{$key}\n";
}
这是我打印出来时的结果 -
casper_mint@casper-mint-dell /tmp $ /tmp/dke /tmp/File1.csv
060001.926941; TOT
060002.029434; RTP
060002.029568; RTP
060002.126895; UL
060002.229327; RDS/A
060002.312512; EON
060002.429382; RTP
060002.585408; BCS
060002.629333; LYG
060002.712240; HBC
这是我想要数组的元素 - 元素[0]是值中的键和元素[1..3]
060001.926941,TOT,86.26,86.48
060002.029434,RTP,310.0,310.66
060002.029568,RTP,310.0,310.74
060002.126895,UL,34.06,34.14
060002.229327,RDS/A,84.47,84.72
060002.312512,EON,56.88,57.04
060002.429382,RTP,310.08,310.77
060002.585408,BCS,58.96,59.06
060002.629333,LYG,46.13,46.41
060002.712240,HBC,93.06,93.23
答案 0 :(得分:2)
始终在每个perl脚本的顶部包含use strict;
和use warnings;
。
您需要创建一个新的匿名数组[ ]
作为哈希值。然后join
显示结果时的值:
#!/usr/bin/perl
use strict;
use warnings;
my %hash;
while (<>) {
chomp;
my @elements = split /,/, $_;
if ($elements[0] ne '' ) {
$hash{ $elements[0] } = [@elements[1..3]];
}
}
foreach my $key (sort keys %hash ) {
print join(',', $key, @{$hash{$key}}) . "\n";
}
当然,如果您的数据确实是固定的宽度,并且您实际上没有对这些值执行任何操作,则实际上不需要split
和join
。以下内容可以做同样的事情:
use strict;
use warnings;
print sort <>;