-1

我有以下文件:

10001;02/07/98;;PI;M^12/12/59^F^^SP^09/12/55
;;;;;M1|F1|SP1;11;10;12;10;12;11;1.82;D16S539
;;;;;M1|F1|SP1;8;8;8;8;10;8;3.45;D7S820
;;;;;M1|F1|SP1;14;12;12;11;14;11;1.57;D13S317
;;;;;M1|F1|SP1;12;12;13;12;13;8;3.27;D5S818
;;;;;M1|F1|SP1;12;12;12;12;12;8;1.51;CSF1PO
.
.
.

$indiv[0]当我运行下面的代码时,我会为文件的每一行打印一个值(在本例中为:) M1M1M1M1M1M1...。我只想使用其中一个值,它可能是第一个、最后一个等。我知道我可以print $indiv[0]在循环外使用并获取最后一个,但事实并非如此,print这里只是一个示例,我需要将该值用于循环内的其他计算。

那么,我怎样才能只访问一个值(仅一行),并将其保留在 while 循环中?

提前致谢!

#!usr/bin/perl
use warnings;
use strict;

my @indiv = ();

open FILE, $ARGV[0] or die $!;

while (<FILE>) {
chomp;
my @field = split /;/;
    if ($field[0] eq '') {@indiv = split /\|/, $field[5];  
    print $indiv[0];
    }
}
4

1 回答 1

2

只需输入一个常用的习惯用法即可过滤掉重复项。

#!/usr/bin/perl
use warnings;
use strict;

my %seen;
while (<>) {
    chomp;
    my @field = split /;/;
    if ($field[0] eq '') {
        my ($foo) = split /\|/, $field[5];  
        if (!$seen{$foo}++) {
            print "$foo\n";
        }
    }
}
于 2012-10-16T22:28:47.303 回答