Ответы:
AFAIK, вы не можете добиться этого просто с помощью чистой ps
команды с опциями. Однако вы можете использовать некоторые текстовые процессоры, например, awk
и заставить их делать то, что вы хотите:
ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}'
Это берет результат из ps
и затем для каждой строки, кроме первой, которая заменяет 5-й столбец, который обычно находится в КБ, в МБ, добавляя суффикс М
Вы можете сделать его псевдонимом и сохранить его в файле .bashrc, чтобы вы могли вызывать его как-то так myps
.
Большинство людей спрашивают, как сохранить формат или использовать другие единицы и точность.
Для простой версии вы можете использовать column -t
выходной фильтр:
ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}' | column -t
Это, однако, не распознает пробелы в последнем столбце правильно. К сожалению, мы имеем дело с форматированием текста и готовим нашу собственную строку формата в printf
подобном формате.
ps afu | awk 'NR==1 {o=$0; a=match($0,$11);}; NR>1 {o=$0;$5=int(10*$5/1024)/10"M";}{ printf "%-8s %6s %-5s %-5s %9s %9s %-8s %-4s %-6s %-5s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, substr(o, a);}'
Объяснение:
NR==1
условие только для первой строки (заголовок). Мы используем исходный вывод ps, чтобы определить, откуда начинается COMMAND:
o=$0
хранит неизмененную целую строку, чтобы мы могли использовать ее позжеa=match($0,$11)
находит местоположение 11-го поля (должно быть там, где столбец COMMAND начинается в исходном выводе)NR>1
для следующих строк (данных). Мы меняем 5-е поле:
$5=int(10*$5/1024)/10"M"
изменяет значение в мегабайтах с одним десятичным знаком и добавляет суффикс "M".%-10s
означает s
для строки, 10
для 10 символов в ширину, -
для выравнивания по левому краю%8s
означает s
для строки, 8
для 8 символов в ширину, и из-за отсутствия -
вывода этого поля выравнивается по правому краю.substr(o, a)
берет подстроку исходной строки (следовательно, o
сохраненной ранее), начиная с позиции, a
вычисленной в предыдущем условии, поэтому мы можем отобразить вывод команды с сохранением пробелов.1.23GB
ps aux | awk '{$5=int(100 * $5/1024/1024)/100"GB";}{ print;}'
ps
форматирование? Снимки полностью удаленыawk
man ps
предполагает, что такой встроенной опции нет.