将行和列排列在一行中

时间:2017-03-09 19:57:00

标签: bash shell

我使用 sar -r 1 1 来获取内存消耗的输出 以下是输出

Linux XXX      SOME_DATE      ARCHITECTURE        NO. OF CPU  

02:05:38 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit     %commit  
02:05:39 PM    125296  16209328     99.23    260300   1496748   9588744     46.71
Average:       125296  16209328     99.23    260300   1496748   9588744     46.71

现在我想摆脱前两行和前两列,以下命令工作

sar -r 1 1 | sed -n 3,4p | cut -d " " -f3-

输出

kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit   
   125820   16208804     99.23    260680   1499836   9588268     46.71

我的问题是,如何排列第一列,第一行=第二列,第二行等等... kbmemfree = 125820, kbmemused = 16208804,等等......

1 个答案:

答案 0 :(得分:2)

你可以管道到awk并在那里做:

 sar -r 1 1 | awk 'NR==3 {for(i=3;i<=NF;++i){a[i]=$i}} NR==4{for(i=3;i<=NF;++i){printf "%s=%s, ", a[i],$i};print '\n'}'

获取输出,如果记录号为3,则捕获数组a[]中的标头。如果记录号为4,则打印出格式header=number,