Boşluk olmadan 'ps' komut çıktısını biçimlendirme


11

psBazı özellikleri ile birlikte çalışan tüm işlemlerin belirli özelliklerini almak için aşağıdaki komutu var :

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

Ayrıştırmak için CSV biçiminde biçimlendirilmesini istiyorum. Not Ayrıştırma işlemini kolaylaştırmak için argümanları sonuna koydum; ,Diğer sütunların hiçbirinde bir var olacağını düşünmüyorum - yanlışsam lütfen düzelt beni.

Boşluğu nasıl kaldırabilirim?

Yanıtlar:


10

Man sayfasından:

-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.

O zaman dene:

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

Bunu Kabul Edilen Cevap olarak seçer misiniz? @ jeff-schaller
Felipe Alvarez

5

İlk 6 alanın boş karakterler içermemesi gerektiğinden (kullanıcı adlarında izin vermedikçe) çıktıyı sonradan işleyebilirsiniz:

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

Burada "s ve \s ile kaçtıktan sonra son alandan (args) alıntı yapılır \.

Gibi bir çıktı üretir:

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

2

Sen kullanabilirsiniz sedile ps. Yani burada istediğiniz: -

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

Ama merak ediyorum, pskendisinin çıktısı çok fazla olduğu için faydalı olup olmayacağını merak ediyorum ,.


Bahsettiğim gibi, ,sonunda koyabileceğim bir sütun seçtiğime inanıyorum , ancak bu çözüm ,istemediğim sütundan kaldıracaktı .
Çita

Üreten çıktıya bakın ve bana bunun istenip istenmediğini söyleyin :) Özellikle komut sütununu dikkate alın.
Oli

Bu aynı olurdu tr ' ' ,. Muhtemelen tr -s ' ' ,burada istiyorsun .
Stéphane Chazelas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.