I have small script in bash, which is generating graphs via gnuplot.
Everything works fine until names of input files contain space(s).
Here’s what i’ve got:
INPUTFILES=("data1.txt" "data2 with spaces.txt" "data3.txt")
...
#MAXROWS is set earlier, not relevant.
for LINE in $( seq 0 $(( MAXROWS - 1 )) );do
gnuplot << EOF
reset
set terminal png
set output "out/graf_${LINE}.png"
filenames="${INPUTFILES[@]}"
set multiplot
plot for [file in filenames] file every ::0::${LINE} using 1:2 with line title "graf_${LINE}"
unset multiplot
EOF
done
This code works, but only without spaces in names of input files.
In the example gnuplot evaluate this:
1 iteration: file=data1.txt - CORRECT
2 iteration: file=data2 - INCORRECT
3 iteration: file=with - INCORRECT
4 iteration: file=spaces.txt - INCORRECT
The quick answer is that you can’t do exactly what you want to do. Gnuplot splits the string in an iteration on spaces and there’s no way around that (AFIK). Depending on what you want, there may be a “Work-around”. You can write a (recursive) function in gnuplot to replace a character string with another —
Bonus points to anyone who can figure out how to do this without recursion…
Then your (bash) loop looks something like:
which preprocesses your input files to add ‘#_#’ to the filenames which have spaces in them… Finally, the “complete” script:
However, I think the take-away here is that you shouldn’t use spaces in filenames 😉