你好,我有一个文件xyz.txt有以下信息
69013 1-3039-1 REGISTER
69013 1-3039-1 100
69013 1-3039-1 401
69013 1-3039-2 REGISTER
69013 1-3039-2 100
69013 2-3039-1 REGISTER
69013 3-3039-1 REGISTER
69013 4-3039-1 REGISTER
.....................
.....................
69023 213-3039-2 REGISTER
69023 193-3039-2 100
69023 193-3039-2 401
69023 222-3039-1 REGISTER
69023 177-3039-2 100
69024 177-3039-2 401
69024 214-3039-1 100
69024 214-3039-1 401
69024 214-3039-2 REGISTER
其中第一个coloumn是秒
我想为每个不同的第3个coloumn存储第二个coloumn
答案 0 :(得分:1)
您的要求对我来说不是很清楚,但这里有一个脚本,它为每个不同的第3列存储第二列:
#!/usr/bin/perl
use 5.10.1;
use strict;
use warnings;
use Data::Dumper;
my %result;
while (<DATA>) {
chomp;
next if /^\s*$/;
my @cols = split;
push @{$result{$cols[2]}}, $cols[1];
}
say Dumper \%result;
__DATA__
69013 1-3039-1 REGISTER
69013 1-3039-1 100
69013 1-3039-1 401
69013 1-3039-2 REGISTER
69013 1-3039-2 100
69013 2-3039-1 REGISTER
69013 3-3039-1 REGISTER
69013 4-3039-1 REGISTER
69023 213-3039-2 REGISTER
69023 193-3039-2 100
69023 193-3039-2 401
69023 222-3039-1 REGISTER
69023 177-3039-2 100
69024 177-3039-2 401
69024 214-3039-1 100
69024 214-3039-1 401
69024 214-3039-2 REGISTER
<强>输出:强>
$VAR1 = {
'401' => [
'1-3039-1',
'193-3039-2',
'177-3039-2',
'214-3039-1'
],
'REGISTER' => [
'1-3039-1',
'1-3039-2',
'2-3039-1',
'3-3039-1',
'4-3039-1',
'213-3039-2',
'222-3039-1',
'214-3039-2'
],
'100' => [
'1-3039-1',
'1-3039-2',
'193-3039-2',
'177-3039-2',
'214-3039-1'
]
};
答案 1 :(得分:0)
对我来说听起来并不像你的问题要求我认为你想要什么。因此,这是一个解决方案,可以获得第3列编目的第2列中的所有值。如果这不是您的意图,我会道歉。
open( my $fh, '<', '/path/to/xyz.txt' ) or die "Did not open $!";
my %hash;
while ( <$fh> ) {
next unless /\S/;
my ( undef, $col2, $col3 ) = split ' ', $_, 3;
next unless $col3;
$hash{ $col3 }{ $col2 }++;
}
close $fh;
此时,%hash
将包含哈希值,其中包含第二个中的带连字符的数字作为键。
这将打印出值。
foreach my $key ( sort keys %hash ) {
my $h = $hash{ $key };
foreach my $k ( sort keys %$h ) {
print "$key, $k\n";
}
}