首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将特定行转到列并分组

将特定行转到列并分组
EN

Stack Overflow用户
提问于 2022-11-19 15:02:41
回答 1查看 47关注 0票数 0

我在标准文件中有以下数据:

代码语言:javascript
复制
09:13:32 19.2 cpu(1)
09:13:32 15.6 cpu(2)
09:13:32 16.7 cpu(3)
09:13:32 17.1 cpu(6)
09:13:32 17.1 cpu(7)
09:13:32 16.9 cpu(8)
09:13:32 16.7 cpu(9)
09:13:39 13.0 cpu(1)
09:13:39 9.2 cpu(2)
09:13:39 9.1 cpu(3)
09:13:39 7.1 cpu(6)
09:13:39 27.1 cpu(7)
09:13:39 46.9 cpu(8)
09:13:39 36.7 cpu(9)

试着把它转换成下面这样的东西。

代码语言:javascript
复制
['Time', 'cpu(1)', 'cpu(2)', 'cpu(3)', 'cpu(6)', 'cpu(7)', 'cpu(8)', 'cpu(9)'],
['09:13:32',  19.2, 15.6, 16.7, 17.1, 17.1, 16.9, 16.7],
['09:13:39', 13.0, 9.2, 9.1, 7.1, 27.1, 46.9, 36.7]

换句话说,我需要原始数据与Google可视化线条图格式对齐,如下所示:https://developers.google.com/chart/interactive/docs/gallery/linechart

我正试图通过使用awk来实现这一点,并且需要一些输入。

代码语言:javascript
复制
awk '{ for(N=1; N<=NF; N+=2) print $N, $(N+1); }' | awk 'BEGIN{q="\047"; printf "["q"Time"q","q"CPU"q"],"}/master/{q="\047"; printf "["q$10q"," $3"],"}' | sed 's/,$//'"

注意:我可以更改原始数据列,如下所示

代码语言:javascript
复制
Time CPU(%) CPU Number

代码语言:javascript
复制
CPU(%) CPU Number Time
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-19 15:27:58

在任意次数和任意数量的cpus中使用任何awk,即使您没有某些time+cpu组合的数据,只要输入的大小不足以容纳内存,也可以工作:

代码语言:javascript
复制
$ cat tst.awk
BEGIN {
    OFS = ", "
}
!seenTimes[$1]++ {
    times[++numTimes] = $1
}
!seenCpus[$3]++ {
    cpus[++numCpus] = $3
}
{
    vals[$1,$3] = $2
}
END {
    printf "[\047%s\047%s", "Time", OFS
    for ( cpuNr=1; cpuNr<=numCpus; cpuNr++ ) {
        cpu = cpus[cpuNr]
        printf "\047%s\047%s", cpu, (cpuNr<numCpus ? OFS : "]")
    }

    for ( timeNr=1; timeNr<=numTimes; timeNr++ ) {
        time = times[timeNr]
        printf ",%s[\047%s\047%s", ORS, time, OFS
        for ( cpuNr=1; cpuNr<=numCpus; cpuNr++ ) {
            cpu = cpus[cpuNr]
            val = vals[time,cpu]
            printf "%s%s", val, (cpuNr<numCpus ? OFS : "]")
        }
    }
    print ""
}
代码语言:javascript
复制
$ awk -f tst.awk file
['Time', 'cpu(1)', 'cpu(2)', 'cpu(3)', 'cpu(6)', 'cpu(7)', 'cpu(8)', 'cpu(9)'],
['09:13:32', 19.2, 15.6, 16.7, 17.1, 17.1, 16.9, 16.7],
['09:13:39', 13.0, 9.2, 9.1, 7.1, 27.1, 46.9, 36.7]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74501103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档