Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

awk script always prints sum=0

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?

like image 711
rafc Avatar asked May 01 '26 11:05

rafc


2 Answers

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"
}
like image 116
chepner Avatar answered May 04 '26 16:05

chepner


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

like image 26
RomanPerekhrest Avatar answered May 04 '26 17:05

RomanPerekhrest



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!