【问题标题】:Comparing and displaying hash values比较和显示哈希值
【发布时间】:2013-05-09 00:53:45
【问题描述】:

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

我想比较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";

【问题讨论】:

    标签: linux perl shell hash scripting


    【解决方案1】:

    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 };
    
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多