gnuplot :Можно ли установить переменные оболочки в сценарии, а затем вызывать их позже?

Ну вот с вводом сюда:

CREATE MULTISET TABLE $$ENV$$_TEMP_ESM.EMPASGMTAMPTMPRTRSE, NO FALLBACK,

Сценарий sed sed '/.*$$ENV$$_/!d;s///;s/,.*//;s/^[ \t]*//'сначала удалите это $$ENV$$_(/.*$$ENV$$_/!d; s///), затем удалите все после запятой (s/,.*//), а затем удалите все начальные пробелы (s/^[ \t]*//), но не пробел перед запятой. Таким образом, вывод будет TEMP_ESM.EMPASGMTAMPTMPRTRSE␣с завершающим пробелом (). Я думаю, что пробел продолжается в вашем выводе.

Я думаю, что вы могли бы изменить эту последнюю замену наs/[ \t]*//g(удалить привязку ^, добавить /g), чтобы удалить все оставшиеся пробелы в любом месте строки.

1
09.09.2020, 18:48
1 ответ

Вы правы :Каждая команда systemвыдает новую оболочку, поэтому переменная, установленная с помощью system "foo=bar", исчезла когда Gnuplot переходит к следующей строке.

В вашем случае очень удобно использовать здесь -docs .

foo="$HOME/path/to/dir"

gnuplot -p<<EOF
set datafile separator "\t"
plot '<(sed "5p" "$foo"/bar.dat)'
EOF

Некоторые заметки о сценарии:

  • sed "5p" fileозначает, что будут выведены все строки файла, но 5-я строка будет дублироваться. Если вы хотели построить только 5-ю строку, используйтеsed -n "5p" file

  • Это вызывает Gnuplot, но по-прежнему является сценарием оболочки.поэтому лучше всегда заключать переменные в кавычки (, например "$foo"), чтобы предотвратить разделение слов.

3
18.03.2021, 23:06

Теги

Похожие вопросы