I'm sorry if the question might be silly, but I am totally new to awk scripting. What I want to do is to calculate and print the usage of CPU and memory by the user "root". I wrote this bash script which executes an awk script:
#!/bin/bash
ps aux > processi.txt
echo Lancio script3.awk
awk -f script3.awk processi.txt
and the awk script is the following:
#!/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"
}
But the print from the END is 0, while in /root/ is correct.
Any advice?
The $ isn't used to expand variables in awk, where it signals the expansion of a particular input field whose number is contained in the given variable. That is, if cpu=3, then $cpu is equivalent to $3. Just use the variable name by itself.
END {
printf("Cpu usata da root=%.1f, memoria=%.1f\n", cpu, mem)
print "\nFine script\n"
}
The initial approach seems to be redundant. Use can extract the needed fields for the user name root directly by ps options:
The whole job:
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 - select data only for the user name root
-eo %cpu,%mem - output only cpu and mem field values
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With