Linux 在AWK语句中定义一个perl变量

Linux 在AWK语句中定义一个perl变量,linux,bash,perl,awk,Linux,Bash,Perl,Awk,我在awk脚本中定义了一个perl变量 my $max = 76500; my $uidNumber = `ypcat passwd | cut -d ":" -f3 | awk -v var=\$max '\$NF >= 76000 && \$NF <= \{print var\}' | sort -n`; print $uidNumber my$max=76500; 我的$uidNumber=`ypcat passwd | cut-d:“-f3 | awk-v

我在awk脚本中定义了一个perl变量

my $max = 76500;
my $uidNumber = `ypcat passwd | cut -d ":" -f3 | awk -v var=\$max '\$NF >= 76000 && \$NF <= \{print var\}' | sort -n`;
print $uidNumber
my$max=76500;

我的$uidNumber=`ypcat passwd | cut-d:“-f3 | awk-v var=\$max'\$NF>=76000&&\$NF=76000&&&$NF好,所以我的第一个答案是:不要

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

open ( my $passwd_file, '<', 'passwd' ) or die $!; 

while ( <$passwd_file> ) { 
    chomp;
    my ( $username, $x, $uid, @rest ) = split /:/;
    print $uid,"\n" if $uid >= 76000 and $uid <= 76500;
}
然后做同样的事情

对列表进行排序并打印最后一个元素:

print "UID:", (sort { $a <=> $b } @uids )[-1],"\n";
打印“UID:”(排序{$a$b}@uids)[-1],“\n”;

好的,所以我的第一个答案是:不要

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

open ( my $passwd_file, '<', 'passwd' ) or die $!; 

while ( <$passwd_file> ) { 
    chomp;
    my ( $username, $x, $uid, @rest ) = split /:/;
    print $uid,"\n" if $uid >= 76000 and $uid <= 76500;
}
然后做同样的事情

对列表进行排序并打印最后一个元素:

print "UID:", (sort { $a <=> $b } @uids )[-1],"\n";
打印“UID:”(排序{$a$b}@uids)[-1],“\n”;
您可以编写

my $uidNumber = `ypcat passwd | cut -d ":" -f3 | awk '\$NF >= 76000 && \$NF <= $max' | sort -n`;
但是将UID保存在一个数组中似乎更有用

my $uidNumber = `ypcat passwd | cut -d ":" -f3 | awk '\$NF >= 76000 && \$NF <= $max' | sort -n`;

但是将UID保存在一个数组中似乎更有用

为什么还要这样做?从perl执行cat/cut/awk/sort
是冗余的吗?你能解释一下你想从你的
/etc/passwd
中得到什么吗?看看它,所有的UID都在7600到76500之间?你为什么要这么做?从perl执行cat/cut/awk/sort是冗余的吗?你能解释一下你想从你的
/etc/passwd
中得到什么吗?看看它,所有的UID都在7600到76500之间?对不起,我的错,我读的不是这个文件。这是NIS中的
ypcat
命令。我已经更新了上面的问题。你能给我举个例子吗?请看最后一行答案:)谢谢,还有一件事我想排序并打印数组的最后一个元素-
@uids
,你能不能也更新一下。好的。。。但这应该不会太可怕,很抱歉,我的错,这不是我正在阅读的文件。这是NIS中的
ypcat
命令。我已经更新了上面的问题。你能给我举个例子吗?请看最后一行答案:)谢谢,还有一件事我想排序并打印数组的最后一个元素-
@uids
,你能不能也更新一下。好的。。。但这不应该太可怕而难以理解。
my $uidNumber = `ypcat passwd | cut -d ":" -f3 | awk '\$NF >= 76000 && \$NF <= $max' | sort -n`;
my $max = 76_500;

my @uids = do {
    open my $fh, '-|', 'ypcat passwd' or die $!;
    sort { $a <=> $b } grep { $_ >= 76_000 and $_ <= $max } map { (split /:/)[2] } <$fh>;
};
my  $uidNumber = join "", map "$_\n", @uids;