Pad AWK柱

Pad AWK柱,awk,sed,Awk,Sed,试图解析BSDtop输出,以仅显示特定进程的PID-COMMAND-MEM $ top -l 1 | grep -E '%CPU\ |coreaudio' PID COMMAND %CPU TIME #TH #WQ #PORTS MEM PURG 354 com.apple.audio. 0.0 00:00.00 2 1 12 820K 0B 296 com.apple.audio. 0.0 00:00.03 2

试图解析BSD
top
输出,以仅显示特定进程的
PID-COMMAND-MEM

$ top -l 1 | grep -E '%CPU\ |coreaudio'
PID    COMMAND          %CPU TIME     #TH    #WQ #PORTS MEM   PURG
354    com.apple.audio. 0.0  00:00.00 2      1   12     820K  0B
296    com.apple.audio. 0.0  00:00.03 2      1   38     2024K 0B
282    coreaudiod       0.0  03:25.05 94     2   736    21M   0B
用于仅显示列
$1-$2

$ top -l 1 | grep -E '%CPU\ |coreaudio' | awk {'print $1" -- "$2'}
PID -- COMMAND
354 -- com.apple.audio.
296 -- com.apple.audio.
282 -- coreaudiod
添加第三列会与“列”混淆,因为第二列没有填充

$ top -l 1 | grep -E '%CPU\ |coreaudio' | awk {'print $1" -- "$2" -- "$8'}
PID -- COMMAND -- MEM
354 -- com.apple.audio. -- 820K
296 -- com.apple.audio. -- 2024K
282 -- coreaudiod -- 21M
如何“填充”列以保持“布局”完好无损?或者我应该使用不同的工具,比如


使用
top-l 1

可以在字符串中填充一些“恒定”的空格:

<<<$input awk '{printf "%-20s %-10s %-4s\n", $1, $2, $8}'
#                         ^^    ^^    ^ field width
#                        ^     ^     ^  left justify

您是否有
?是的,尝试将
awk
列配管到
,但未能成功!两个都很好!(将second设置为20widt;)你知道这是否可以像
column-t
那样完成吗,所以“尽可能小”,但使用
awk
,没有任何静态数字?不,至少不容易。您可以在
awk
中重新设计
column
功能,我见过这样做的脚本(主要是在没有column的系统上)。。。但这只是重新发明轮子。不管怎样,这都很简单——只需将每一列保持在一个单独的数组中,获得每一数组中元素的最大长度,然后对每一列执行
printf“%-”maximum\u legnth\u fo\u elements\u in\u array1“s”,array1[i]
。我怀疑那会“更小”<代码>尽可能小-Unix理念是一个工具完成一项工作<代码>awk过滤列<代码>列格式化输出。
<<<$input awk '{print $1, $2, $8}' | column -t