如何调整以使我的命令在用于printf的awk中工作

如何调整以使我的命令在用于printf的awk中工作,awk,Awk,我有一个在unix中工作的命令来grep十大文件。但是,我在Perl脚本中使用命令时遇到了问题。虽然这个错误告诉我哪里出了问题,但我不知道如何修复它,因为我不熟悉awk。有人能告诉我如何调整该命令,以便我在Perl脚本中使用它吗? 用于grep前10名文件的Unix命令:- find . -name .snapshot -prune -o -printf '%s %u %p\n' \ | sort -nr \ | head \ | awk '{printf"%5.2f MB %s %s\n

我有一个在unix中工作的命令来grep十大文件。但是,我在Perl脚本中使用命令时遇到了问题。虽然这个错误告诉我哪里出了问题,但我不知道如何修复它,因为我不熟悉awk。有人能告诉我如何调整该命令,以便我在Perl脚本中使用它吗?
用于grep前10名文件的Unix命令:-

find . -name .snapshot -prune -o -printf '%s %u %p\n' \
 | sort -nr \
 | head \
 | awk '{printf"%5.2f MB %s %s\n", $1/1024/1024, $2, $3}'
这是我在Perl中使用的方式,但它显示了错误:-

my $cmd = `find . -name .snapshot -prune -o -printf '\%s \%u \%p\n' | sort -nr | head | awk '{printf \%9.2f MB \%s \%s\n , \$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\%s\n\',\$1\/1024\/1024,\$2,\$3}'
(我猜您也应该转义引号,但我对
perl
几乎一无所知,所以请检查一下)


无论如何,如果您在perl中有所有必要的“本机”工具,您可能不应该使用它。

我真的不知道您为什么要在perl中使用sort head awk, 然而,自由就像啤酒一样,因此下面是一个从perl中调用awk的示例:-)

awk位在perl中与以下内容相等

while (<>) {
    ($Fld1,$Fld2,$Fld3) = split(' ', $_, -1);
    printf "%9.2f MB %s %s\n", ($Fld1 / 1024 / 1024), $Fld2, $Fld3;
}
while(){
($Fld1,$Fld2,$Fld3)=拆分('',$)-1;
printf“%9.2f MB%s%s\n”,($Fld1/1024/1024)、$Fld2、$Fld3;
}

您应该使用Perl的
文件::Find
并让Perl对结果进行解析。不需要
head
sort
awk
-Perl可以完成所有这些。嗨,Nya,我按照您的建议-->我的$cmd=
查找-name.snapshot-prune-o-printf'\%s\%u\%p\n'| sort-nr | head | awk'{printf\“\%9.2f MB\%s\%s\%s\n\”,\$1\/1024\/1024,\$2,\$3}
;但它在引号中给了我错误“(awk:cmd.line:1:{printf”%9.2f MB%s%s awk:cmd.line:1:^unterminated string)。
while (<>) {
    ($Fld1,$Fld2,$Fld3) = split(' ', $_, -1);
    printf "%9.2f MB %s %s\n", ($Fld1 / 1024 / 1024), $Fld2, $Fld3;
}