Ну вот с вводом сюда:
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
), чтобы удалить все оставшиеся пробелы в любом месте строки.
Вы правы :Каждая команда 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"
), чтобы предотвратить разделение слов.