Jawaban:
AFAIK Anda tidak dapat mencapainya hanya dengan ps
perintah murni dengan opsi. Namun Anda dapat menggunakan beberapa pemroses teks seperti awk
dan membuatnya untuk melakukan apa yang Anda inginkan:
ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}'
Ini mengambil hasil dari ps
dan kemudian untuk setiap baris kecuali yang pertama itu mengganti kolom ke-5 yang di KB normal, ke MB menambahkan akhiran M.
Anda dapat membuatnya menjadi alias dan menyimpannya dalam file .bashrc sehingga Anda dapat memanggilnya dengan sesuatu seperti myps
.
Sebagian besar orang bertanya bagaimana mempertahankan format atau menggunakan unit lain dan presisi.
Untuk versi sederhana, Anda dapat menggunakan column -t
filter keluaran:
ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}' | column -t
Namun ini tidak mengenali spasi di kolom terakhir dengan benar. Sayangnya kita harus berurusan dengan pemformatan teks dan menyiapkan string format kita sendiri dalam printf
format seperti.
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);}'
Penjelasan:
NR==1
kondisi hanya untuk baris pertama (tajuk). Kami menggunakan output ps asli untuk menentukan di mana COMMAND mulai:
o=$0
menyimpan seluruh baris yang belum dimodifikasi sehingga kita dapat menggunakannya nantia=match($0,$11)
menemukan lokasi bidang ke-11 (yang seharusnya berada di tempat kolom PERINTAH mulai dalam output asli)NR>1
untuk baris berikut (data). Kami mengubah bidang ke-5:
$5=int(10*$5/1024)/10"M"
mengubah nilai menjadi Megabita dengan satu tempat desimal dan menambahkan akhiran "M".%-10s
berarti s
untuk string, 10
untuk lebar 10 karakter, -
untuk rata kiri%8s
berarti s
untuk string, 8
untuk lebar 8 karakter, dan karena tidak ada -
output dari bidang ini disejajarkan dengan benar.substr(o, a)
mengambil substring dari garis asli (karenanya o
disimpan sebelumnya) mulai dari posisi yang a
dihitung dalam kondisi sebelumnya, sehingga kita dapat memiliki output perintah yang ditampilkan dengan spasi dipertahankan.1.23GB
):ps aux | awk '{$5=int(100 * $5/1024/1024)/100"GB";}{ print;}'
ps
format? Tab sepenuhnya dilepaskan denganawk
man ps
menunjukkan kepada saya bahwa tidak ada opsi bawaan seperti itu.