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

作为三元组的注释,我相信我们可以使用不同的机制(可能在shell中进行计算(,然后可以编写一些东西,老实说,在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 47 NR==2{print $2} 47" );
}
else
{
printf("Memory Usage: %s/%sMB %.2f%%n", $3,$2,$3*100/$2)
}
}'

这里有一种不同的方法,使用带有过程替换的单个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)

最新更新