0

我可以从/etc/passwdbyUID和 username 打印所有行。

我想比较 和 的值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";
4

1 回答 1

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 };
于 2013-05-14T16:41:53.660 回答