Antworten:
AFAIK Sie können es nicht einfach durch reinen ps
Befehl mit Optionen erreichen. Sie können jedoch einige Textverarbeitungsprogramme verwenden, awk
um das zu tun, was Sie möchten:
ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}'
Dies ergibt sich aus ps
und dann für jede Zeile mit Ausnahme der ersten, die die fünfte Spalte, die normalerweise in KB ist, durch MB ersetzt, wobei das M-Suffix hinzugefügt wird.
Sie können es zu einem Alias machen und in einer .bashrc- Datei speichern, damit Sie es mit so etwas wie aufrufen können myps
.
Die meisten Leute fragen sich, wie man das Format beibehält oder andere Einheiten und Präzision verwendet.
Für eine einfache Version können Sie den column -t
Ausgabefilter verwenden:
ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}' | column -t
Dies erkennt jedoch Leerzeichen in der letzten Spalte nicht korrekt. Leider müssen wir uns mit der Textformatierung befassen und unsere eigene Formatzeichenfolge im printf
ähnlichen Format vorbereiten .
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);}'
Erläuterung:
NR==1
Bedingung ist nur für die erste Zeile (Header). Wir verwenden die ursprüngliche ps-Ausgabe, um zu bestimmen, wo COMMAND startet:
o=$0
speichert die unveränderte gesamte Zeile, damit wir sie später verwenden könnena=match($0,$11)
findet die Position des 11. Feldes (an der Stelle, an der die COMMAND-Spalte in der ursprünglichen Ausgabe beginnt)NR>1
ist für folgende Zeilen (Daten). Wir ändern das 5. Feld:
$5=int(10*$5/1024)/10"M"
Ändert den Wert in Megabyte mit einer Dezimalstelle und fügt das Suffix "M" hinzu.%-10s
bedeutet s
für Zeichenfolge, 10
für 10 Zeichen breit, -
für Linksausrichtung%8s
bedeutet s
für Zeichenfolge, 8
für 8 Zeichen breit und da keine -
Ausgabe dieses Feldes rechtsbündig ist.substr(o, a)
Nimmt die Teilzeichenfolge der ursprünglichen Zeile (daher o
zuvor gespeichert) ab der Position, a
die in der vorherigen Bedingung berechnet wurde, sodass die Befehlsausgabe mit beibehaltenen Leerzeichen angezeigt werden kann.1.23GB
):ps aux | awk '{$5=int(100 * $5/1024/1024)/100"GB";}{ print;}'
ps
Formatierung beizubehalten? Tabs sind komplett entfernt mitawk
man ps
legt nahe, dass es keine solche eingebaute Option gibt.