'ps'コマンドの出力を空白なしでフォーマットする


11

ps実行中のすべてのプロセスの特定のプロパティといくつかのプロパティを取得する次のコマンドがあります。

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

解析できるように、CSV形式にしたいのですが。解析を簡単にするために、最後に引数を置いていることに注意してください。,他の列にはが存在しないと思います。間違っている場合は修正してください。

空白を削除するにはどうすればよいですか?

回答:


10

manページから:

-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/$/"/'

ここでは、"sと\s をエスケープした後の最後のフィールド(args)を引用してい\ます。

次のような出力を生成します。

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

2

あなたは使うことができsedps。だからあなたが欲しいものはここにあります:-

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

それは有用であろう場合の出力として、しかし、私は、不思議ps自体がの多くを持っています,


先ほど触れたように、,最後にa を付けられる可能性のある列を1つだけ選択したと思いますが、この解決策では,、その列から不要なを削除します。
チーター

生成される出力を見て、それが望ましいと思うかどうか教えてください:)特にコマンド列に注意してください。
Oli

それはと同じtr ' ' ,です。たぶんtr -s ' ' ,ここに。
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.