在一段时间内的内存使用情况数据中,内存大小以字节<megabytes>m
或<gigas>g
为单位。如何告诉Gnuplot,如果看到<number>m
,则应将数字乘以g
后缀1024 ^ 2和1024 ^ 3?
示例:
0
360m
1.1g
谢谢!
答案 0 :(得分:2)
使用UNIX命令sed
在新列中将这些字母替换为乘数。
plot "< sed 's/\\([^kmg]\\)$/\\1 1/;s/k$/ 1024/;s/m$/ 1048576/;s/g$/ 1073741824/' data.dat" u ($1*$2) w lp notitle
gnuplot处理的数据如下:
0 1
360 1048576
1.1 1073741824
然后将使用第一列和第二列的相乘来绘制此数据:u ($1*$2)
。
如果您使用的是Windows,则可以找到here的sed
。
答案 1 :(得分:1)
这就是我最终要做的,本质上是对类似解决方案posted earlier by F. Knorr的扩展(请注意,带有单位标记的大小位于数据的第2列中):
resolveUnit(u,mul,x)=(pos=strstrt(x,u), pos > 0 ? sprintf("%f",real(substr(x,1,pos - 1))*mul) : x)
resolveUnits(x)=(resolveUnit("g",1024*1024*1024,resolveUnit("m",1024*1024,x)))
check(x)=(real(resolveUnits(x)))
plot infile using 1:(check(stringcolumn(2)))
我确信此代码可以改进很多。不要犹豫发表评论:-)
我想研究采用this AWK solution中的整洁方法来支持m和g以外的其他单元,但是没有时间。
答案 2 :(得分:1)
当您需要改进时,就可以开始:
resolveUnit(s)=(pos=strstrt("kmgtp",s[strlen(s):*]), real(s)*(1024**pos))
print resolveUnit("123.0")
print resolveUnit("1k")
print resolveUnit("2m")
print resolveUnit("4g")
这使用单位后缀的位置作为1024
的指数。在计算过程中,后缀被real
,real('100k') => 100.0