ベストアンサー1
ps
AFAIKオプションを含む純粋なコマンドでは簡単に行うことはできません。しかし、例えば、いくつかのテキストプロセッサを使用してawk
所望のタスクを実行させることができる。
ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}'
これは、結果を取得し、ps
最初の行を除く各行に対して通常KB単位の5番目の列を置き換え、MBにMサフィックスを追加します。
エイリアスとして作成して保存できます。.bashrcmyps
.
ほとんどの人は、フォーマットを保存する方法や他の単位と精度を使用する方法を尋ねます。
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
条件は最初の行(タイトル)にのみ適用されます。 COMMANDが始まる位置を決定するために、生のps出力を使用します。o=$0
後で使用するために変更されていない行全体を保存します。a=match($0,$11)
11番目のフィールドの位置を見つけます(これは元の出力でCOMMAND列の先頭でなければなりません)。
NR>1
次の行(データ)について。 5番目のフィールドを変更します。$5=int(10*$5/1024)/10"M"
値を小数点以下の1桁のメガバイトに変更し、「M」サフィックスを追加します。- printf はすべてのフィールドを列と同じように表示します。
%-10s
左揃えの10文字幅のs
文字列を表します。10
-
%8s
s
8文字の幅の文字列を表し、出力が8
ないため、-
フィールドは右揃えになります。
substr(o, a)
o
前の条件が評価された場所から始まり、元の行(したがって以前に保存された)のサブストリングを取得するため、a
スペースを維持しながらコマンド出力を表示できます。