早些时候提出了这个问题,试图找出在系统命令中放置“的位置,并且一个用户建议如下使用转义字符,但仍然会出现语法错误。所有潜在客户均表示赞赏!
free -m | awk 'NR==2{
if (($3*100/$2)>=10.00){
printf system("ps aux --sort=-%mem | awk \'NR==2{print $2}\'");
}
else
{
printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 ;
}
}'
答案 0 :(得分:1)
正如三人联盟的评论一样,我相信我们可以使用其他机制(可能在外壳程序中进行计算),然后可以编写一些东西,说实话,在awk
中调用awk
并不是很酷。您能否再尝试一次?
free -m | awk -v s1="'" 'NR==2{
if (($3*100/$2)>=10.00){
printf system("ps aux --sort=-%mem | awk " s1 "NR==2{print $2}" s1 );
}
else
{
printf("Memory Usage: %s/%sMB %.2f%%\n", $3,$2,$3*100/$2)
}
}'
编辑: :如果不想使用变量存储'
,请按如下所示使用其八进制表示形式。
free -m | awk 'NR==2{
if (($3*100/$2)>=10.00){
printf system("ps aux --sort=-%mem | awk \047 NR==2{print $2} \047" );
}
else
{
printf("Memory Usage: %s/%sMB %.2f%%\n", $3,$2,$3*100/$2)
}
}'
答案 1 :(得分:1)
这是使用带有进程替换的单个awk
的另一种方法:
awk 'NR == FNR {
if (FNR == 2)
if ($3*100/$2 > 10)
p=1
else
printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2
next
}
p && FNR == 2 {
print $2
exit
}' <(free -m) <(ps aux --sort=-%mem)