我在 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
运行脚本时出现以下错误
awk: $NF >= 76000 && $NF <= {print var}
awk: ^ syntax error
在 undefined variable 时完美运行
my $uidNumber = `ypcat passwd | cut -d ":" -f3 | awk '\$NF >= 76000 && \$NF <= 76500' | sort -n`;
print $uidNumber
最佳答案
好的,所以我的第一个答案是:不要。
#!/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;
}
这没有排序,它只是按照“密码文件”的顺序打印。我不清楚您实际上在寻找什么,因为您在最后排序 - 所以会有一个包含大量数字的字符串。
但也许这样的东西就是您想要的?
#!/usr/bin/env perl
use strict;
use warnings;
open ( my $passwd_file, '<', 'passwd' ) or die $!;
my @uids;
while ( <$passwd_file> ) {
chomp;
my ( $username, $x, $uid, @rest ) = split /:/;
push ( @uids, $uid ) if $uid <=76500 and $uid >= 76000;
}
print join "\n", sort { $a <=> $b } @uids;
注意 - 正如您在评论中提到的,它是一个 ypcat 命令:
open ( my $input, '-|', 'ypcat passwd' );
然后做同样的事情。
排序列表并打印最后一个元素:
print "UID:", (sort { $a <=> $b } @uids )[-1],"\n";
关于linux - 在 AWK 语句中定义一个 perl 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39243984/