Форматуйте команду "ps" без пробілів


11

У мене є така psкоманда, щоб отримати особливі властивості всіх запущених процесів разом з деякими властивостями:

ps --no-headers -exo "uname,ppid,pid,etime,%cpu,%mem,args"

Я хочу, щоб він був відформатований у CSV, щоб я міг його розібрати. Примітка. Я поставив аргументи в кінці, щоб полегшити розбір; Я не думаю ,, що в будь-якому з інших стовпців буде заповіт - будь ласка, виправте мене, якщо я помиляюся.

Як видалити пробіл?

Відповіді:


10

На чоловіковій сторінці:

-o format       user-defined format.
                format is a single argument in the form of a blank-separated or comma-separated list, which offers a
                way to specify individual output columns. The recognized keywords are described in the STANDARD FORMAT
                SPECIFIERS section below. Headers may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as
                desired. If all column headers are empty (ps -o pid= -o comm=) then the header line will not be
                output. Column width will increase as needed for wide headers; this may be used to widen up columns
                such as WCHAN (ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm). Explicit width control
                (ps opid,wchan:42,cmd) is offered too. The behavior of ps -o pid=X,comm=Y varies with personality;
                output may be one column named "X,comm=Y" or two columns named "X" and "Y". Use multiple -o options
                when in doubt. Use the PS_FORMAT environment variable to specify a default as desired; DefSysV and
                DefBSD are macros that may be used to choose the default UNIX or BSD columns.

Тому спробуйте:

/bin/ps -o uname:1,ppid:1,pid:1

Чи не проти вибирати це як прийнятий відповідь? @ jeff-schaller
Феліпе Альварес

5

Оскільки перші 6 полів не повинні містити порожніх символів (якщо ви не дозволите їх у іменах користувачів), ви можете після обробки результату:

ps --no-headers -exo "uname,ppid,pid,etime,%cpu,%mem,args" | sed '
  s/[\"]/\\&/g
  s/  */,/;s/  */,/;s/  */,/;s/  */,/;s/  */,/;s/  */,"/
  s/$/"/'

Тут цитується останнє поле (args) після того, як уникнули "s і \s \.

Виходить такий результат:

stephane,3641,3702,10-00:20:24,0.1,0.3,"some cmd,and,args... VAR=foo\"bar"

2

Ви можете використовувати sedз ps. Тож, що ви хочете, тут: -

ps --no-headers -exo "uname,ppid,pid,etime,%cpu,%mem,args" | sed 's/\ /,/g'

Але мені цікаво, чи було б це корисно, оскільки вихід psсам по собі має багато ,.


Як я вже згадував, я вважаю, що я вибрав лише один стовпець, який міг би бути, ,який я поставив у кінці, однак це рішення видалить ,із цього стовпця, який я не хочу.
Гепард

Подивіться на результат, який генерує, і скажіть мені, якщо ви вважаєте, що це бажано :) Особливо зверніть увагу на командний стовпець.
Олі

Це було б те саме, що tr ' ' ,. Ви, мабуть, хочете tr -s ' ' ,тут.
Стефан Шазелас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.