我可以通过/etc/passwd和username打印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";

最佳答案

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

关于linux - 比较和显示哈希值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16548317/

10-11 07:17