我很困惑。
我的值输出如下:
$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
答案 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
或awk
和pr
:
$ awk '$1=$1' OFS="\n" file |pr -2 -t -s" : "
即。 $1=$1
重建记录,OFS="\n"
将输出字段分隔符更改为换行符。 pr
制作甜蜜的专栏。