Answers:
AFAIK您不能仅通过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
类似于-like格式。
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=int(10*$5/1024)/10"M"
将值更改为兆位(小数点后一位),并添加“ 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
我看来,没有这样的内置选项。