Я сделал это несколько раз. Но не используйте EOF, потому что вы не можете писать на bash внутри тегов EOF и EOF < <. В зависимости от имен файлов вы можете сделать это по-разному.
a) Если имена файлов являются петлями (например, 1.DAT 2.dat 3.dat и т.д.)
#!/bin/bash
for((i=0;i<1;i++)) do
echo "plot '-' u 1:2"
for((j=1;j<=3;j++)) do
cat $i.dat
echo "e"
done
done | gnuplot -persist
Первый цикл является своего рода буфером, чтобы питать все это GNUPLOT.
b) Если имена файлов не являются петлями (например, ñlasjkd.dat ajñljd.mov añlsjkd.gif), сначала необходимо перенести их в новую папку. Затем сделайте
#!/bin/bash
ffiles=$(ls | xargs) # a list of the folder's files
# Use the list to pipe all the data to gnuplot using cat
for((i=0;i<1;i++)) do
echo "plot '-' u 1:2 w lp";
cat $ffiles;
echo "e";
done | gnuplot -persist
с) Если вы хотите еще немного, то есть: сохранить информацию о отделенных файлах только на одном файл ... но сохранил в Листки живых использовать «индекс» в Gnuplot (если Gnuplot читает две черные линии догадывается, что это еще одна спецификация)
#!/bin/bash
ffiles=$(ls|xargs)
ls $ffiles > ffiles.list # A file with the folder's files
while read line
do
cat $line;
echo -e; echo -e;
done <ffiles.list> alldata.dat
# ^-feeding ffiles.list to the while loop
# and writing the file alldata.dat
теперь вы можете пойти в GNUPLOT и Acces на одну таблицу
plot 'alldata.dat' index 1 u 1:2
, и вы увидите, что первый файл появляется в списке «ffiles .список". Если вы хотите увидеть более одного, скажем, 4
plot 'alldata.dat' index 1:4 u 1:2
сложно, но легко.
Спасибо, это работает, но одна небольшая проблема. У меня есть строки сценария gnuplot, которые используют имя файла, например: set output 'data.png'. Мне нужно также заменить его аргументом командной строки. – user431336 2010-12-07 18:02:25
Конечно, вы могли бы разделить скрипт на еще больше файлов, но, возможно, взгляните на мой другой ответ. – 2010-12-07 18:26:23