Ответы:
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.23GBps aux | awk '{$5=int(100 * $5/1024/1024)/100"GB";}{ print;}'
psформатирование? Снимки полностью удаленыawk
man psпредполагает, что такой встроенной опции нет.