如果这个问题可能很愚蠢,我很抱歉,但我对awk脚本完全不熟悉。 我想要做的是用户“root”计算和打印CPU和内存的使用情况。 我写了这个执行awk脚本的bash脚本:
#!/bin/bash
ps aux > processi.txt
echo Lancio script3.awk
awk -f script3.awk processi.txt
并且awk脚本如下:
#!/usr/bin/awk
BEGIN{
print "Inizio script\n"
cpu=0
mem=0
}
/root/{
printf("Cpu usata da root loop=%.1f, memoria=%.1f\n",$3,$4)
cpu=cpu+$3
mem=mem+$4
}
END{
printf("Cpu usata da root=%.1f, memoria=%.1f\n",$cpu,$mem)
print "\nFine script\n"
}
但是END
的打印件为0
,而/root/
中的打印件是正确的。
有什么建议吗?
答案 0 :(得分:4)
$
不用于扩展awk
中的变量,它指示特定输入字段的扩展,其数字包含在给定变量中。也就是说,如果cpu=3
,则$cpu
相当于$3
。只需单独使用变量名称。
END {
printf("Cpu usata da root=%.1f, memoria=%.1f\n", cpu, mem)
print "\nFine script\n"
}
答案 1 :(得分:2)
最初的方法似乎是多余的。使用可以直接通过root
选项提取用户名ps
所需的字段:
整个工作:
ps U root -eo %cpu,%mem --no-header | awk 'BEGIN{ print "Inizio script\n" }
{ printf("Cpu usata da root loop=%.1f, memoria=%.1f\n",$1,$2); cpu+=$1; mem+=$2; }
END { printf("Cpu usata da root=%.1f, memoria=%.1f\n\nFine script\n", cpu, mem) }'
U root
- 仅为用户名root
选择数据
-eo %cpu,%mem
- 仅输出cpu
和mem
字段值
答案 2 :(得分:1)
虽然这本身并不能解决您的问题,但另一个不符合评论的建议是:一致地格式化代码会使您的代码更易于阅读和调试
像这样:
#!/usr/bin/awk
BEGIN {
print "Inizio script\n"
cpu = 0
mem = 0
}
/root/ {
printf("Cpu usata da root loop=%.1f, memoria=%.1f\n", $3, $4)
cpu = cpu + $3
mem = mem + $4
}
END {
printf("Cpu usata da root=%.1f, memoria=%.1f\n", cpu, mem)
print "\nFine script\n"
}
我
{}
内的任何内容缩进到同一级别=
和+
{
,
参数printf()
之后添加空格
$
。