awk的系统命令

时间:2018-11-12 17:07:33

标签: bash shell awk

早些时候提出了这个问题,试图找出在系统命令中放置“的位置,并且一个用户建议如下使用转义字符,但仍然会出现语法错误。所有潜在客户均表示赞赏!

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 ; 
}
}'

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)