比较和显示哈希值

时间:2013-05-14 16:28:48

标签: linux perl shell hash scripting

我可以通过/etc/passwd和用户名打印UID的所有行。

我想比较UID的值,并按<150>150显示相应的用户名。

这是我的while循环和计数

while(<PASSWD>){
    chomp;
    my @f = split /:/;
    sort @f;
    @{$passwd{$f[3]}}=@f;
    print @f[3 , 0], "\n";
}

my $count = keys(%passwd);
print $count, "\n";

1 个答案:

答案 0 :(得分:3)

sort @f不执行任何操作 - sort返回已排序的列表,但不会更改它。如果您在程序中添加了use warnings;,Perl会告诉您。

我就是这样做的:

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

open my $PASSWD, '<', '/etc/passwd' or die $!;

my %passwd;
while (<$PASSWD>) {
    chomp;
    my @f = split /:/;
    @{ $passwd{ $f[3] } } = @f;
 }

my $reported = 0;
for my $k (sort { $a <=> $b } keys %passwd) {
    if ($k > 150 and not $reported) {
        $reported = print "Over 150\n";
    }
    print "$k\n";
}

您还可以grep小型的密钥:

my @under150 = grep $_ < 150, keys %passwd;
print $_->[0], "\n" for @passwd{ @under150 };