#!/bin/bash

set -eou pipefail

#
# usage: mem-jobs [n]
#  Show n most memory intensive processes. n defaults to 30.
#  Prints pid,rss,vsize,user,command separated by spaces.
#

n=30
if [[ $# -eq 1 ]]; then n="$1"; fi

currdir="$(dirname "$0")"

ps -eo pid,rss,vsize,user,command | sort -k"$TAB"2n | tail -"$n" | \
( while read -r line;
  do
    rss=$((`echo $line | cut -d' ' -f2` * 1024))
    vsize=$((`echo $line | cut -d' ' -f3` * 1024))
    rss=$(echo $rss | $currdir/mem2str | tr -d ' ')
    vsize=$(echo $vsize | $currdir/mem2str | tr -d ' ')
    echo $line | awk '{printf "%s %s",$1,"'"$rss $vsize"'"; for(i=4;i<=NF;i++){printf " %s",$i;} printf "\n"; }'
  done )
