быстрый ответ в том, что вы не можете делать то, что вы хотите сделать. Gnuplot разбивает строку на итерации на пространствах, и нет никакого способа обойти это (AFIK). В зависимости от того, что вы хотите, может быть «Work-around». Вы можете написать функцию (рекурсивно) в Gnuplot заменить строку символов с другой -
#S,C & R stand for STRING, CHARS and REPLACEMENT to help this be a little more legible.
replace(S,C,R)=(strstrt(S,C)) ? \
replace(S[:strstrt(S,C)-1].R.S[strstrt(S,C)+strlen(C):] ,C,R) : S
бонусные баллы для тех, кто может понять, как сделать это без рекурсии ...
Тогда ваш (Баш) цикл выглядит примерно так:
INPUTFILES_BEFORE=("data1.txt" "data2 with spaces.txt" "data3.txt")
INPUTFILES=()
#C style loop to avoid changing IFS -- Sorry SO doesn't like the #...
#This loop pre-processes files and changes spaces to '#_#'
for ((i=0; i < ${#INPUTFILES_BEFORE[@]}; i++)); do
FILE=${INPUTFILES_BEFORE[${i}]}
INPUTFILES+=("`echo ${FILE} | sed -e 's/ /#_#/g'`") #replace ' ' with '#_#'
done
, который выполняет предварительную обработку входных файлов для добавления «# _ #» в именах файлов, имеющих пробелы в них ... И, наконец, «полный» сценарий:
...
INPUTFILES_BEFORE=("data1.txt" "data2 with spaces.txt" "data3.txt")
INPUTFILES=()
for ((i=0; i < ${#INPUTFILES_BEFORE[@]}; i++)); do
FILE=${INPUTFILES_BEFORE[${i}]}
INPUTFILES+=("`echo ${FILE} | sed -e 's/ /#_#/g'`") #replace ' ' with '#_#'
done
for LINE in $(seq 0 $((MAXROWS - 1)));do
gnuplot <<EOF
filenames="${INPUTFILES[@]}"
replace(S,C,R)=(strstrt(S,C)) ? \
replace(S[:strstrt(S,C)-1].R.S[strstrt(S,C)+strlen(C):] , C ,R) : S
#replace '#_#' with ' ' in filenames.
plot for [file in filenames] replace(file,'#_#',' ') every ::0::${LINE} using 1:2 with line title "graf_${LINE}"
EOF
done
Однако, я думаю, что отводящий здесь является то, что вы не должны использовать пробелы в именах файлов;)
Не используйте 'seq'. 'for ((line = 0; line
ormaaj
@ormaaj исправленный вопрос. Я имел в виду некоторые системные вызовы из gnuplot .. как sed для переключения пробелов в тире, а затем обратно. И почему бы не использовать имена переменных seq (readability?!) И all-caps? – Rob