我在標準輸出中有以下資料:
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)
試圖將其轉換為如下所示。
['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 實作此目的并需要一些輸入。
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/,$//'"
注意:我可以像下面這樣更改原始資料列
Time CPU(%) CPU Number
或者
CPU(%) CPU Number Time
uj5u.com熱心網友回復:
使用任何 awk 任意次數和任意數量的 cpu,即使您沒有一段時間 cpu 組合的資料也可以作業,只要輸入不是太大以至于無法全部放入記憶:
$ 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 ""
}
$ 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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/536277.html
標籤:Linux狂欢壳awk
