gnuplot
может обрабатывать столько файлов, сколько вам нужно в одной команде.
Просто введите команду plot
, разделяющую спецификацию каждого файла и столбца запятой (как вы начали делать выше)
plot \
"folder1/data" using 1:2,
"folder1/data" using 1:3,
"folder2/data" using 1:2,
"folder2/data" using 1:3,
"folder3/data" using 1:2,
"folder3/data" using 1:3
Обычно каждая команда plot
выводит вывод в отдельном окне (это зависит от того, как вызывается gnuplot
- в отдельном процессе или нет).
При вызове из сценария оболочки вы можете порождать отдельные подоболочки для получения вывода в отдельных окнах или в рамках C-программы вы можете fork
разделять процессы для одной и той же цели.
Вы также можете использовать multiplot
, см. Multiplot - размещение графиков рядом друг с другом «Gnuplotting
Вы также можете найти ответы на некоторые части своего вопроса здесь gnuplot: отображение данных из нескольких входных файлов на одном графике
редактировать на основе комментариев
Хорошо, теперь, как я понимаю, вы хотите автоматизировать создание файла печати из списка каталогов с именем folderXX
(где XX
может быть что угодно) ниже текущего каталога, и в каждой папке будет файл с именем data
, где вы хотите построить первый график для каждого из 2-го и 3-го столбцов, затем вы можете создать временный файл графика (скажем, tmp.plt
), циклически перебирая список folderXX
(вы можете настроить глобализацию на необходимо) и выводить команды построения по мере использования с помощью простого перенаправления.
Например, что-то вроде следующего:
#!/bin/bash
## truncate tmp.plt and set line style
echo -e "set style data lines\nplot \\" > tmp.plt
cnt=0 ## flag for adding ',' line ending
## loop over each file
for i in folder*/data; do
if ((cnt == 0)); then ## check flag (skips first iteration)
cnt=1 ## set flag to write ending comma
else
printf ",\n" >> tmp.plt ## write comma
fi
printf "\"$i\" using 1:2,\n" >> tmp.plt ## write using 1:2
printf "\"$i\" using 1:3" >> tmp.plt ## write using 1:3 (no ending)
done
echo "" >> tmp.plt ## write final newline
( примечание: echo
и printf
чередуются, чтобы получить желаемое поведение выхода для продолжения строки)
При запуске в каталоге, содержащем folder1, folder2, folder3, folder4
, каждый из которых содержит файл data
, например,
$ tree
.
├── folder1
│ └── data
├── folder2
│ └── data
├── folder3
│ └── data
├── folder4
│ └── data
это приведет к tmp.plt
графическому файлу, который можно затем вызвать с помощью gnuplot -p tmp.plt
, например,
$ cat tmp.plt
set style data lines
plot \
"folder1/data" using 1:2,
"folder1/data" using 1:3,
"folder2/data" using 1:2,
"folder2/data" using 1:3,
"folder3/data" using 1:2,
"folder3/data" using 1:3,
"folder4/data" using 1:2,
"folder4/data" using 1:3
Это должно быть ближе к тому, что вы искали, основываясь на вашем комментарии.