私はこれを何度かやったことがあります。ただし、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
c) さらに必要な場合、つまり、分割されたファイルの情報を 1 つのファイルだけに保持する場合...ただし、データシートを維持するには、gnuplot の「インデックス」を使用します (gnuplot が 2 つの黒い線を読み取った場合、それは別のデータシートであると推測します)。
#!/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 に移動して 1 つのデータシートにアクセスできます
plot 'alldata.dat' index 1 u 1:2
リスト「ffiles.list」に最初のファイルが表示されます。複数見たい場合は4と言ってください
plot 'alldata.dat' index 1:4 u 1:2
トリッキーだけど簡単。