Linux 如何提取列以释放命令

Linux 如何提取列以释放命令,linux,bash,shell,awk,Linux,Bash,Shell,Awk,我在linux中执行命令free-mo,输出为: total used free shared buffers cached Mem: 64401 33265 31135 0 667 15455 Swap: 4099 0 4099 但我需要输出: total us

我在linux中执行命令
free-mo
,输出为:

             total       used       free     shared    buffers     cached
Mem:         64401      33265      31135          0        667      15455
Swap:         4099          0       4099
但我需要输出:

             total       used       free
Mem:         64401      33265      31135
Swap:         4099          0       4099
我打算使用
free-mo | awk'{print$1,$2,$3,$4}'
,但我的结果是:

total used free shared
Mem: 64401 33268 31132
Swap: 4099 0 4099
非常感谢您的帮助。

您可以使用:

free -mo |
awk '{print (NR==1?"Type":""), $1, $2, $3, (NR==1?"":$4)}' |
column -t
  • 添加了一列
    Type`for make first row a由4列组成
  • column-t
    用于表格格式
输出:

Type   total  used  free
Mem:   2003   163   1840
Swap:  1430   0     1430

保留右对齐的数字:

free -mo | awk 'BEGIN{len=0} NR==1{len=length(gensub(/free.*$/, "free",1))} {print substr($0,1,len)}'
             total       used       free
Mem:          7913       7377        535
Swap:         8115        569       7546

另一个
awk
不带填充头

$ awk -v OFS='\t' 'NR==1{print "",$1,$2,$3;next} {print $1,$2,$3,$4}' file

        total   used    free
Mem:    64401   33265   31135
Swap:   4099    0       4099

感谢您的回复。仅供参考,
awk'{print(NR>1?“:“Total”),$1、$2、$3、$4}'
将在管道到
列-t
后产生相同的输出。非常感谢Ed,我应该考虑到这一点。