我有这个命令可以在unix中使用grep来查找前10个大文件。但是,我在使用Perl脚本中的命令时遇到问题。虽然错误显示我出错的地方,但我不知道修复它,因为我不熟悉awk。任何人都可以告诉我如何调整命令,以便我使用它与Perl脚本中的反引号? Unix命令grep前10个文件: -
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
请点亮一些。谢谢!
答案 0 :(得分:0)
尝试用双引号括起printf
的第一个参数,如下所示:
awk '{printf \"\%9.2f MB \%s \%s\n\", \$1\/1024\/1024, \$2, \$3}'
(我猜你也应该逃避引用,但我几乎不知道perl
,所以请检查一下。)
无论如何,如果你在perl中拥有所有必需的“原生”工具,你可能不应该掏出来。
答案 1 :(得分:0)
我真的不知道你为什么要在perl中使用sort head awk, 然而,作为啤酒的自由,所以这里是一个从perl中调用awk的例子: - )
my $cmd = qx(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);}' );
foreach my $line (split /[\r\n]+/, $cmd) {
print $line;
}
awk位,在perl中是等同于这样的
while (<>) {
($Fld1,$Fld2,$Fld3) = split(' ', $_, -1);
printf "%9.2f MB %s %s\n", ($Fld1 / 1024 / 1024), $Fld2, $Fld3;
}