Câu trả lời:
AFAIK bạn không thể đạt được nó chỉ bằng ps
lệnh thuần túy với các tùy chọn. Tuy nhiên, bạn có thể sử dụng một số bộ xử lý văn bản như awk
và làm cho nó để làm những gì bạn muốn:
ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}'
Điều này nhận kết quả từ ps
và sau đó cho mỗi dòng ngoại trừ dòng đầu tiên nó thay thế cột thứ 5 trong KB thông thường, để MB thêm hậu tố M.
Bạn có thể biến nó thành bí danh và lưu trữ nó trong tệp .bashrc để bạn có thể gọi nó bằng một cái gì đó như myps
.
Hầu hết mọi người đang hỏi làm thế nào để bảo tồn định dạng hoặc sử dụng các đơn vị và độ chính xác khác.
Đối với phiên bản đơn giản, bạn có thể sử dụng column -t
bộ lọc đầu ra:
ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}' | column -t
Điều này tuy nhiên không nhận ra không gian trong cột cuối cùng một cách chính xác. Thật không may, chúng tôi đã phải đối phó với định dạng văn bản và chuẩn bị chuỗi printf
định dạng giống như định dạng của chúng tôi .
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);}'
Giải trình:
NR==1
điều kiện chỉ dành cho dòng đầu tiên (tiêu đề). Chúng tôi đang sử dụng đầu ra ps ban đầu để xác định nơi bắt đầu điều khiển:
o=$0
lưu trữ toàn bộ dòng chưa sửa đổi để chúng tôi có thể sử dụng nó saua=match($0,$11)
tìm vị trí của trường thứ 11 (phải là nơi cột LỆNH đang bắt đầu ở đầu ra ban đầu)NR>1
dành cho các dòng sau (dữ liệu). Chúng tôi đang thay đổi lĩnh vực thứ 5:
$5=int(10*$5/1024)/10"M"
thay đổi giá trị thành Megabyte với một chữ số thập phân và thêm hậu tố "M".%-10s
có nghĩa là s
cho chuỗi, 10
cho 10 ký tự, -
cho căn lề trái%8s
có nghĩa là s
cho chuỗi, 8
cho 8 ký tự rộng và do không có -
đầu ra của trường này được căn phải.substr(o, a)
lấy chuỗi con của dòng gốc (do đó o
được lưu trữ trước đó) bắt đầu từ vị trí được a
tính trong điều kiện trước đó, vì vậy chúng ta có thể có đầu ra lệnh được hiển thị với các khoảng trắng được bảo toàn.1.23GB
):ps aux | awk '{$5=int(100 * $5/1024/1024)/100"GB";}{ print;}'
ps
định dạng? Các tab hoàn toàn bị loại bỏ vớiawk
man ps
gợi ý cho tôi rằng không có tùy chọn tích hợp như vậy.