Я хочу использовать gnuplot для рисования фигуры из файла данных, скажем, foo.data . В настоящее время я жестко запрограммировал имя файла данных в командном файле, скажем, foo.plt , и запустил команду gnuplot foo.plg
для отображения данных. Однако я хочу передать имя файла данных в качестве аргумента команды, например, запустив команду gnuplot foo.plg foo.data
. Как разобрать аргументы командной строки в файле скрипта gnuplot? Спасибо.
источник
if
для предоставления значений по умолчанию.if ! exists("filename") filename='default.data'
if (!exists("filename")
вместоif ! exists("filename")
.-e
аргумента, например,-e "filename='default.data'; foo='bar'"
или-e "filename='default.data'" -e "foo='bar"'
.-e ...
Опция должна предшествовать имени файла. Действительно изman gnuplot
мы можем прочитать:-e
«список команд» выполняет запрошенные команды перед загрузкой следующего входного файла . ,Вы можете передавать аргументы скрипту gnuplot начиная с версии 5.0 с флагом
-c
. Эти аргументы доступны через переменныеARG0
кARG9
,ARG0
будучи сценарий, иARG1
дляARG9
строковых переменных. Количество аргументов определяется какARGC
.Например, следующий скрипт ("script.gp")
можно назвать как:
или в рамках gnuplot как
В gnuplot 4.6.6 и более ранних версиях существует
call
механизм с другим (теперь устаревшим) синтаксисом. Аргументы доступны через$#
,$0
, ...,$9
. Например, тот же скрипт выше выглядит так:и он вызывается в gnuplot как (помните, версия <4.6.6)
Обратите внимание, что для имени скрипта нет переменной, поэтому
$0
есть первый аргумент, и переменные вызываются в кавычках. Невозможно использовать это непосредственно из командной строки, только с помощью хитростей, как предложено @ con-fu-se.источник
-c
переключатель со скриптом, который содержит такие строки, какplot 'data' using 0:($1/100)
.gnuplot
умирает с ошибкой неверного выражения, потому что$1
исчез. Где я не прав? Обратите внимание, что без-c
, скрипт выполняется успешно.gnuplot 5.0
, добавив к этим примерам строку вродеplot 'data' using 0:($1/100)
, и не понял, что вы говорите. Это было бы редко, так как эта версия определяет переменныеARG0
-ARG9
, а не$1
-$9
. Я предполагаю, что у вас также есть версия 5.0 (не так ли?), Поскольку-c
флаг не поддерживается более ранними версиями. Мне нужно было бы увидеть минимальный сценарий, чтобы увидеть, где настоящая проблема: /gnuplot 5.0 patchlevel 0
под Cygwin . Сценарий, состоящий из одной строки,print ARG1; plot 'data' using 0:($1/100)
правильно печатает значение, переданное как,ARG1
а затем завершается с ошибочным выражением, указывающим на косую чертуprint ARG1; plot 'data' using 0:(/100)
.Вы также можете передавать информацию через среду, как это предлагается здесь . Пример Исмаила Амина повторяется здесь:
В оболочке:
В скрипте Gnuplot:
источник
name=plot_data_file ./the_gnuplot_script
.name=value command
говорит оболочке выполнить команду с этой конкретной переменной в своем окружении. Я использую bash 4.3.11, но я считаю, что это очень распространенная функция оболочки.Ответ Яри Лааманен - лучшее решение. Я просто хочу объяснить, как использовать более 1 входного параметра с переменными оболочки:
и foo.plg:
Как вы можете видеть, больше параметров передается с помощью точек с запятой (как в скриптах bash), но строковые переменные ДОЛЖНЫ быть заключены в '' (синтаксис gnuplot, НЕ синтаксис Bash)
источник
'
или"
для строк. Внешние кавычки вокруг-e
аргумента должны быть"
заменены переменными bash. Следующее также отлично работает:OUTPUT=foobar; gnuplot -e "output=\"$OUTPUT\"; print output"
Вы можете использовать трюк в среде Unix / Linux:
в программе gnuplot: заговор "/ dev / stdin" ...
В командной строке: gnuplot program.plot <data.dat
источник
На этот вопрос хорошо ответили, но я думаю, что я могу найти здесь нишу, чтобы заполнить ее независимо, хотя бы для того, чтобы уменьшить нагрузку на кого-то, кто гуглит это, как я. Ответ от vagoberto дал мне то, что мне нужно для решения моей версии этой проблемы, и поэтому я поделюсь своим решением здесь.
Я разработал сценарий сюжета в современной среде, которая позволила мне сделать:
Это прекрасно работает из командной строки в среде с недавним gnuplot (5.0.3 в моем случае).
При загрузке на мой сервер и выполнении это не удалось, поскольку версия сервера была 4.6.4 (текущая в Ubuntu 14.04 LTS). Приведенная ниже прокладка решила эту проблему, не требуя каких-либо изменений в оригинальном сценарии.
Комбинация этих двух сценариев позволяет передавать параметры из сценариев bash в gnuplot независимо от версии gnuplot и практически любого * nix.
источник
Вы могли бы даже сделать магию оболочки, например, так:
Моя реализация немного сложнее (например, замена некоторых магических токенов в вызове sed, хотя я уже на этом ...), но я упростил этот пример для лучшего понимания. Вы также можете сделать это еще проще .... YMMV.
источник
В оболочке пиши
и последовательно файлы, которые вы хотите. -persist используется, чтобы экран gnuplot оставался до тех пор, пока пользователь не закроет его вручную.
источник
gnuplot -persist -c "myscript.plt" "mydata.csv" "myoutput.png"
эта команда работает нормально, и я получаю файл «myoutput.png», как и ожидалось, но экран gnuplot не появляется (exit
команда NO в myscript.plt). Зачем? А как сделать, чтобы экран gnuplot показывал в моем примере?Еще один способ заключается в следующем:
У вас есть скрипт gnuplot с именем
scriptname.gp
:Теперь вы можете вызывать скрипт gnuplot
scriptname.gp
по этому замысловатому синтаксису:источник
Ответ @ vagoberto кажется лучшим ИМХО, если вам нужны позиционные аргументы , и я хочу добавить небольшое улучшение.
предложение Вагоберто:
который вызывается:
для таких ленивых машин, как я, можно сделать исполняемый скрипт (
chmod 755 script.gp
)затем используйте следующее:
и выполнить его как:
источник