回答:
私の知る限りps
、オプション付きの純粋なコマンドだけではそれを達成することはできません。ただし、次のようなテキストプロセッサを使用してawk
、必要な処理を実行できます。
ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}'
これはps
、最初の行を除いてすべての行から結果を取得し、通常はKBである5番目の列を置き換え、MBにMサフィックスを追加します。
これをエイリアスにして.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"
値を小数点以下1桁のメガバイトに変更し、接尾辞「M」を追加します。%-10s
手段s
文字列、のための10
ワイド10文字のために、-
左の整列のために%8s
手段s
文字列、のための8
ワイド8つの文字のため、と理由がないの-
は、このフィールドの出力は右詰めです。substr(o, a)
前の条件で計算さo
れた位置から始まる元の行の(したがって以前に保存された)サブストリングをa
取得するため、スペースを保持したままコマンド出力を表示できます。1.23GB
):ps aux | awk '{$5=int(100 * $5/1024/1024)/100"GB";}{ print;}'
ps
フォーマットを維持しながら同じ目標を達成することは可能ですか?タブは完全に取り除かれますawk
man ps
がないことから、そのような組み込みオプションはないことがわかります。