我正在尝试将包含4列和多行的文件加载到哈希中,我需要将第1个字段与包含字母数字数据并与日期匹配的另一个文件合并。这是我的数据示例:< / p>
file 1:
AOKX 495408, L, 04/02/13, SWCOMP
AOKX 495408, L, 04/20/13, SWCOMP
BLHX 102, L, 04/01/13, WILDCOM
CRDX 7067, L, 04/05/13, TYCO
WW 9030, L, 04/02/13, HALLI
file2:
AOKX 495408, L, 04/15/13, SWCOMP
BLHX 102, L, 04/03/13, WILDCOM
CRDX 7067, L, 04/20/13, TYCO
WW 9030, L, 04/30/13, HALLI
BLHX 102, L, 04/30/13, WILDCOM
output file needs to look like:
AOKX 495408 L 04/02/13 04/15/13 SWCOMP
BLHX 102 L 04/02/13 04/03/13 WILDCOM (more than 1 date exists 04/30/13)
这是我到目前为止 - 它完全不起作用 - 在测试时,想要打印$ key中的内容,它给了我第二个字段。我似乎无法使用更多的2个字段。所以我被困在这里
my %hash;
open FILE1, "<", "out1.txt" or die "$!\n";
while ( <FILE1> ) {
chomp $_;
my ( $key, $le, $date, $company ) = split ',', $_;
$hash{$key} = $le, $date, $company;
push @{ $hash{$key} }, $_;
}
close FILE1;
我将格式更改为[$ le,$ date,$ company]非常感谢。我的下一个问题是,一旦读入哈希值,我无法弄清楚如何将两个文件中的数据组合在一起。我需要能够将第一个字段(车号)与两个文件中的日期相匹配。我自己的文件有多个日期列表。如果没有日期,它仍然会被写出来。如果我真的需要多个日期来匹配彼此最接近的日期。 (例如04/01/2013 04/05/2013然后04/06/2013 04/30/2013)我希望这是有道理的。
所以这就是我到目前为止(非常基本只是想弄清楚每一步)任何帮助都非常感激,因为我只是在学习并且真的需要让这项工作...... thx
#!/usr/bin/perl
#
use strict;
use warnings;
my $cnt = 0;
open FILE1, "<", "out1.txt" or die "$!\n";
my %hash;
while ( <FILE1> ) {
chomp $_;
my ( $key, $le, $date, $company ) = split ',', $_;
$hash{$key} = [$le, $date, $company];
push @{ $hash{$key} }, $_;
$cnt++;
# print "$key $date\n";
}
print "total pcon records processed: $cnt\n"; #just to verify all records read
$cnt=0;
close FILE1;
open FILE2, "<", "out2.txt" or die "$!\n";
open OUTFILE, ">", "final.txt" or die "$!\n";
while (<FILE2>) {
my ( $rkey, $rle, $rdate, $rcompany ) = split ',', $_;
$hash{$rkey} = [$rle, $rdate, $rcompany];
push @{ $hash{$rkey} }, $_;
$cnt++;
# print OUTFILE "\n"; #to write out once figure out how to combine
}
print "total rcpl records processed: $cnt\n"; #just to verify all records read
close FILE2;
close OUTFILE;
需要输出看起来像:
AOKX 495408 L 04/02/13 04/15/2013 SWCOMP
AOKX 495408 L 04/20/13 SWCOMP
BLHX 102 L 04/01/13 04/03/2013 WILDCOM
BLHX 102 L 04/30/2013 WILDCOM
答案 0 :(得分:4)
当perl看到该行
时$hash{$key} = $le, $date, $company;
它将此解释为从列表($le, $date, $company)
到列表($hash{$key})
的列表分配,列表$hash{$key} = [$le, $date, $company];
将第一个列表中的每个项目分配给第二个列表中的匹配项目,并抛弃任何没有匹配的项目项目。您要做的是将包含值的数组引用分配给散列键,如此
{{1}}