pslists=$(mktemp /tmp/pslist.XXXXXXX)
useridlists=$(mktemp /tmp/userlist.XXXXXXXX)
results=$(mktemp /tmp/results.XXXXXXXX)
ps -eo uid,pcpu --sort uid --no-headers \
| sed -e 's/^ \{1,\}//' -e 's/ \{1,\}/ /' > $pslists
cut -d" " -f1 $pslists | uniq > $useridlists
IFS_DEF=$IFS
IFS="
"
for userid in $(cat $useridlists); do
usageratesum="0"
for cpurate in $(cat $pslists | grep "^$userid "); do
usagerate=$(echo $cpurate | cut -d" " -f2)
usageratesum=$(echo "scale=1; $usagerate + $usageratesum" | bc)
done
username=$(grep ":$userid:" /etc/passwd | cut -d":" -f1)
echo $username $usageratesum >> $results
done
IFS=$IFS_DEF
cat $results | sort -k2nr | awk '{ printf "%-20s %4.1f%\n", $1, $2 }'
trap 'rm -f $pslists $userlists $results' EXIT