Создание команды с помощью sprintf. Это возможно? - PullRequest
0 голосов
/ 28 мая 2019

Я хочу построить некоторые данные.Данные находятся в нескольких файлах, и строка в них не всегда одинакова.Поэтому я использовал 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
        }
    }
}

Так что мне было интересно, а) У меня может быть функция, которая возвращает строку, которая является командой, которая затем запускается gnuplot б) Гдеошибка может исходить из:

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 голосов
/ 01 июня 2019

Сегодня я понял это. Я использовал print в цикле for, чтобы увидеть, что возвращает команда. Перед тем, как опубликовать вопрос, я с успехом попробовал команду в отдельном терминале. Проблема была в том, что я только что проверил его с первым элементом metrics. Отпечатки показали, что я забыл, что metrics должен быть в нижнем регистре.

В заключение. Да, вы можете соединить строку через функцию вместе, и тогда gnuplot запустит ее, как я и ожидал. Смотрите использование com(..) в сюжетной линии.

Во-вторых. Я думаю, что ошибка xrange обычно указывает на то, что на графике нет точек данных, а gnuplot не любит xrange 0. Чтобы выяснить это, я использовал отпечатки. Я выполнил быстрый поиск, если есть подробный режим, но он не был успешным, поэтому выводит его на печать.

Может быть, кто-то может забрать что-то, как я.

...