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

标签 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

运行脚本时出现以下错误

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/

相关文章:

angularjs - Capybara-Poltergeist Angular modulerr 在 Linux 上

php - 如何通过 root 的 php 脚本访问 0750 文件夹?

linux - 如何查看进程是否被杀死?

json - 从 VBoxManage 输出中解析冒号分隔的表格数据

python - Perl 和 Python 之间正则表达式行为的差异?

c++ - 将正则表达式编译成 native 程序集会比 PCRE 或其他正则表达式引擎更快吗?

linux - Linux下如何将正在运行的C++进程堆转储到一个文件中?

java - Eclipse Neon 安装在新的 Arch 安装上失败

sql - 从 PL/SQL 调用 shell 脚本,但 shell 以网格用户而不是 oracle 的身份执行

perl - 关于 IO::Select 的说明