Как сохранить содержимое файла в течение первых 10 секунд в Perl - PullRequest
0 голосов
/ 02 февраля 2011

Привет всем, у меня есть файл 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

где первый столбец - секунды

я хочу сохранить второй столбец для каждого отдельного 3-го столбца

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Ваше требование мне не очень понятно, но вот скрипт, который хранит вторые столбцы для каждого отдельного 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'
                   ]
        };
0 голосов
/ 02 февраля 2011

Для меня это не звучит так, как будто твой вопрос спрашивает, что, я думаю, ты хочешь.Таким образом, это решение, позволяющее получить все значения в столбце 2, каталогизированные по столбцу 3. Я извиняюсь, если это не было вашим намерением.

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";
    }
}
...