The following command line uses awk
to prepend the last field of each line of file.txt, does a reverse numerical sort, then uses cut
to remove the added field:
awk '{print $NF,$0}' file.txt | sort -nr | cut -f2- -d' '
Your ps
command should work if you sort it properly. From man ps
:
--sort spec
Specify sorting order. Sorting syntax is
[+|-]key[,[+|-]key[,...]]. Choose a multi-letter key from the
STANDARD FORMAT SPECIFIERS section. The "+" is optional since
default direction is increasing numerical or lexicographic
order. Identical to k. For example: ps jax --sort=uid,-ppid,
+pid
I'm not sure which time you want to sort by but here are the relevant choices:
STANDARD FORMAT SPECIFIERS
bsdtime TIME accumulated cpu time, user + system. The display
format is usually "MMM:SS", but can be shifted to
the right if the process used more than 999
minutes of cpu time.
cputime TIME cumulative CPU time, "[DD-]hh:mm:ss" format.
(alias time).
etime ELAPSED elapsed time since the process was started, in
the form [[DD-]hh:]mm:ss.
etimes ELAPSED elapsed time since the process was started, in
seconds.
I think from your question that you want cputime
. If so, this should give you your desired output:
ps -eo pid,user,args,etime,time,%cpu --sort cputime | grep -v root
Best Answer
Stealing Andy's idea and making it a function so it's easier to use:
Now I can do: