使用sprintf创建命令。这可能吗?

时间:2019-05-28 11:25:55

标签: gnuplot

我想绘制一些数据。数据在几个文件中,并且所在的行并不总是相同。因此,我使用了grep和其他一些命令行工具来提取所需的行。我在网上阅读,使用gnuplot应该可以从字符串或命令行结果中进行打印。

我在linux中工作。

set terminal pdfcairo enhanced font "Garamond,10" fontscale 1.0 size 9in,9in

set nogrid
set samples 1001
set border 31 linewidth .3
set output "access/accessTimeAcrossFreq.pdf"
set xlabel "freq"
set ylabel "Time [s]"
set key right top
set size square
set autoscale y
set termoption lw 2.5

volts = "0.8"
fins = "111 122 222"
freq = "0.5G 1G 1.5G 2G 2.5G 3G"

metrics = "read1bldeltav read0bldeltav read1senseChange read0senseChange read1latchChange read0latchChange sense1speed sense0speed write1CellFlip write0CellFLip write1CellSwing write0CellSwing write1BLSwing write0BLSwing powerpertime"

runTitle = "abetraryString"
filename(fin, f, volt) = sprintf("../%s_temp27_fin%s_freq%s_vdd%s/accessTimeVolLSA/result.txt", runTitle, fin, f, volt)

data(met, file) = system(sprintf("grep -n '%s' %s | cut -d: -f 2 | awk '{$1=$1};1'", met, file))
com(met, file) = sprintf("< grep -n '%s' %s | cut -d: -f 2 | awk '{$1=$1};1'", met, file)

do for [fin in fins] {
    do for [v in volts] {
        do for [met in metrics] {
            set title sprintf("%s VLSA across Freq, fins %s, %sV, w/o she", met, fin, v)
            plot for[i=1:words(freq)] com(met, filename(fin, word(freq, i), v)) using (i):2:xtic(word(freq, i))  notitle with points lc i
        }
    }
}

所以我想知道是否a)我可以拥有一个返回字符串的函数,该函数是由gnuplot运行的命令 b)错误可能来自哪里:

line 32: warning: Skipping data file with no valid points
line 32: warning: Skipping data file with no valid points
line 32: warning: Skipping data file with no valid points
line 32: warning: Skipping data file with no valid points
line 32: warning: Skipping data file with no valid points
line 32: warning: Skipping data file with no valid points
line 32: x range is invalid

我想,也许我需要在一行数据的结尾处换行。还是因为gnuplot始终认为第一行不是数据...我不知道。

1 个答案:

答案 0 :(得分:0)

今天我想通了。我在for循环中使用了prints来查看命令返回的内容。在发布问题之前,我在单独的终端中成功尝试了该命令。问题是我刚刚使用metrics的第一个元素对其进行了测试。指纹显示我忘记了metrics必须全部小写。

总结。是的,您可以通过函数将一个字符串放在一起,然后gnuplot将按照我的期望运行它。请参见在情节行中使用com(..)

第二。我认为xrange错误通常指出在图中没有数据点,并且gnuplot不喜欢xrange为0。为了弄清楚这一点,我使用了打印件。我快速搜索了是否有详细模式,但没有成功,因此将其打印出来。

也许有人可以带走我一样的东西。