Shell脚本按列打印结果

时间:2016-09-20 09:33:22

标签: bash shell

我很困惑。

我的值输出如下:

$maxlen

我已经检索了每个键和值,但只想显示结果,如:

jstat -gc 7110

S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
52416.0 52416.0 178.1   0.0   419456.0 261407.3  524288.0   30663.4   50272.0 30745.7    898   10.393   6      0.243   10.636

帮助!!我的代码:

SOC : 52416.0
S1C : 52416.0 

4 个答案:

答案 0 :(得分:1)

$ cat ip.txt 
S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
52416.0 52416.0 178.1   0.0   419456.0 261407.3  524288.0   30663.4   50272.0 30745.7    898   10.393   6      0.243   10.636

$ sed -E 's/\s+/\n/g' ip.txt | pr -2ts' : '
S0C : 52416.0
S1C : 52416.0
S0U : 178.1
S1U : 0.0
EC : 419456.0
EU : 261407.3
OC : 524288.0
OU : 30663.4
PC : 50272.0
PU : 30745.7
YGC : 898
YGCT : 10.393
FGC : 6
FGCT : 0.243
GCT : 10.636

使用sed用换行替换空格,然后使用pr设置输出样式

答案 1 :(得分:1)

如果列完美匹配,您可以使用awk执行类似的操作:

awk -v OFS=' : ' '{ for (i = 1; i <= NF; ++i) if (NR == 1) key[i] = $i; else val[i] = $i } 
 END { for (i = 1; i <= NF; ++i) print key[i], val[i] }' file

遍历每一行的字段,将键和值分配给单独的数组。读完两行后,打印组合输出。

print在每个字段之间插入输出字段分隔符OFS,因此请将其设置为' : '以获得所需的输出。

答案 2 :(得分:1)

awk -v OFS=: 'NR==1 {for(i=1;i<=NF;i++) a[i]=$i;next} {for(i=1;i<=NF;i++)  print   a[i],$i}' infile
S0C:52416.0
S1C:52416.0
S0U:178.1
S1U:0.0
EC:419456.0
EU:261407.3
OC:524288.0
OU:30663.4
PC:50272.0
PU:30745.7
YGC:898
YGCT:10.393
FGC:6
FGCT:0.243
GCT:10.636

答案 3 :(得分:0)

tr两次,pr用于输出控制:

$ tr -s \  '\n' file | pr -2 -t -s" : "
S0C : 52416.0
S1C : 52416.0
S0U : 178.1
S1U : 0.0
EC : 419456.0
EU : 261407.3
OC : 524288.0
OU : 30663.4
PC : 50272.0
PU : 30745.7
YGC : 898
YGCT : 10.393
FGC : 6
FGCT : 0.243
GCT : 10.636

awkpr

$ awk '$1=$1' OFS="\n" file |pr -2 -t -s" : "

即。 $1=$1重建记录,OFS="\n"将输出字段分隔符更改为换行符。 pr制作甜蜜的专栏。