我有这个命令,它在unix中可以用来grep前10个大文件。但是,我在Perl脚本中使用该命令时遇到了问题。虽然这个错误告诉我哪里出了问题,但我不知道该怎么解决,因为我不熟悉awk。有人能告诉我如何调整命令,以便我可以在Perl脚本中使用它吗
Unix命令grep top 10文件:-
find . -name .snapshot -prune -o -printf '%s %u %pn'
| sort -nr
| head
| awk '{printf"%5.2f MB %s %sn", $1/1024/1024, $2, $3}'
这是我在Perl中的使用方式,但它显示了错误:-
my $cmd = `find . -name .snapshot -prune -o -printf '%s %u %pn' | sort -nr | head | awk '{printf %9.2f MB %s %sn , $1/1024/1024, $2, $3}'` ;
执行时显示的错误:-
awk: cmd. line:1: {printf %9.2f MB %s %s
awk: cmd. line:1: ^ parse error
awk: cmd. line:2: , $1/1024/1024, $2, $3}
awk: cmd. line:2: ^ parse error
awk: cmd. line:2: , $1/1024/1024, $2, $3}
awk: cmd. line:2: ^ parse error
awk: cmd. line:1: {printf %9.2f MB %s %s
awk: cmd. line:1: ^ parse error
awk: cmd. line:2: , $1/1024/1024, $2, $3}
awk: cmd. line:2: ^ parse error
awk: cmd. line:2: , $1/1024/1024, $2, $3}
awk: cmd. line:2: ^ parse error
awk: cmd. line:1: {printf %9.2f MB %s %s
awk: cmd. line:1: ^ parse error
awk: cmd. line:2: , $1/1024/1024, $2, $3}
awk: cmd. line:2: ^ parse error
awk: cmd. line:2: , $1/1024/1024, $2, $3}
awk: cmd. line:2: ^ parse error
请开灯。谢谢!
尝试将printf
的第一个参数用双引号括起来,如下所示:awk '{printf "%9.2f MB %s %sn", $1/1024/1024, $2, $3}'
(我猜你也应该转义引号,但我对perl
几乎一无所知,所以请检查一下)。
无论如何,如果您在perl中拥有所有必要的"本机"工具,那么您可能不应该花钱。
我真的不知道你为什么要在perl中使用排序头awk,然而,自由就像啤酒,所以这里有一个从perl中调用awk的例子:-)
my $cmd = qx(find . -name .snapshot -prune -o -printf '%s %u %pn' | sort -nr | head | awk '{printf("%9.2f MB %s %s \n",($1/1024/1024) ,$2,$3);}' );
foreach my $line (split /[rn]+/, $cmd) {
print $line;
}
awk位在perl中由类似的东西等效
while (<>) {
($Fld1,$Fld2,$Fld3) = split(' ', $_, -1);
printf "%9.2f MB %s %sn", ($Fld1 / 1024 / 1024), $Fld2, $Fld3;
}