Arrays 如何将多行读入一个数组或散列,直到下一行符合Perl中的某些条件?

Arrays 如何将多行读入一个数组或散列,直到下一行符合Perl中的某些条件?,arrays,perl,hash,readline,readfile,Arrays,Perl,Hash,Readline,Readfile,如果我想将具有相同元素的多行读取到一个数组或散列中,直到到达具有不同元素的下一行。这些元素已被排序,因此它们位于相邻的行中。例如: 1_1111 1234 1_1111 2234 1_1111 3234 1_1112 4234 1_1112 5234 1_1112 6234 1_1112 7234 1_1113 8234 1_1113 9234 我想将具有相同元素1_1111的前三行读取到一个数组中,对其进行处理,然后读取具有相同元素1_1112的下几行; my $key;

如果我想将具有相同元素的多行读取到一个数组或散列中,直到到达具有不同元素的下一行。这些元素已被排序,因此它们位于相邻的行中。例如:

1_1111  1234
1_1111  2234 
1_1111  3234
1_1112  4234
1_1112  5234
1_1112  6234
1_1112  7234
1_1113  8234
1_1113  9234
我想将具有相同元素1_1111的前三行读取到一个数组中,对其进行处理,然后读取具有相同元素1_1112的下几行;
my $key;
my @nums;
while (<>) {
   my @fields = split;
   if (@nums && $fields[0] ne $key) {
      process($key, @nums);
      @nums = ();
   }

   $key = $fields[0];
   push @nums, $fields[1];
}

process($key, @nums) if @nums;
我的@nums; 而(){ 我的@fields=split; 如果(@nums&&$fields[0]ne$key){ 进程($key,@nums); @nums=(); } $key=$fields[0]; 推送@nums,$fields[1]; } 如果@nums,则处理($key,@nums);
我的$key;
我的@nums;
而(){
我的@fields=split;
如果(@nums&&$fields[0]ne$key){
进程($key,@nums);
@nums=();
}
$key=$fields[0];
推送@nums,$fields[1];
}
如果@nums,则处理($key,@nums);

您可以将文件读入数组的散列:

#!/usr/bin/perl

use strict;
use warnings;

my %hash;
while (<DATA>) {
    my ($key, $value) = split /\s+/;
    push @{ $hash{$key} }, $value;
}

__DATA__
1_1111  1234
1_1111  2234
1_1111  3234
1_1112  4234
1_1112  5234
1_1112  6234
1_1112  7234
1_1113  8234
1_1113  9234
#/usr/bin/perl
严格使用;
使用警告;
我的%hash;
而(){
我的($key,$value)=拆分/\s+/;
push@{$hash{$key}},$value;
}
__资料__
1_1111  1234
1_1111  2234
1_1111  3234
1_1112  4234
1_1112  5234
1_1112  6234
1_1112  7234
1_1113  8234
1_1113  9234

散列的键对应于左列中的数字,而值是右列中的数字数组。现在,您可以遍历散列并根据需要对其进行处理。

您可以将文件读入数组散列:

#!/usr/bin/perl

use strict;
use warnings;

my %hash;
while (<DATA>) {
    my ($key, $value) = split /\s+/;
    push @{ $hash{$key} }, $value;
}

__DATA__
1_1111  1234
1_1111  2234
1_1111  3234
1_1112  4234
1_1112  5234
1_1112  6234
1_1112  7234
1_1113  8234
1_1113  9234
#/usr/bin/perl
严格使用;
使用警告;
我的%hash;
而(){
我的($key,$value)=拆分/\s+/;
push@{$hash{$key}},$value;
}
__资料__
1_1111  1234
1_1111  2234
1_1111  3234
1_1112  4234
1_1112  5234
1_1112  6234
1_1112  7234
1_1113  8234
1_1113  9234

散列的键对应于左列中的数字,而值是右列中的数字数组。现在,您可以遍历散列并根据需要进行处理。

谢谢!但是我想逐行处理的原因是文件太大了。这将适用于较小的文件。谢谢!但是我想逐行处理的原因是文件太大了。这将适用于较小的文件。谢谢@这是我正在寻找的!谢谢@这就是我要找的!