Linux 在AWK语句中定义一个perl变量
我在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
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;