我可以通过/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";
答案 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 };