Bash Gnuplot:在不同文件夹中的文件中打印多个
我有几个文件,它们在不同的文件夹中有相同的名称、数据,名为folder1、folder2、folder3,我想一次绘制不同文件夹中所有文件的第1列和第2列。换句话说,从folder1..3所在的根目录,我不想使用: p‘folder1/data’u1:2,‘folder1/data’u1:3 及 p文件夹2/数据'u 1:2',文件夹2/数据'u 1:3 同样对于folder3和其他28个文件夹,我在真实的案例中也有。 Gnuplot中是否有for命令或某些相关命令,我可以立即打印不同文件夹中的所有数据文件,最好是在不同的窗口中 gnuplot可以在一个命令中处理任意数量的文件 只需发出plot命令,用逗号分隔每个文件和列规范,就像上面所做的那样Bash Gnuplot:在不同文件夹中的文件中打印多个,bash,gnuplot,Bash,Gnuplot,我有几个文件,它们在不同的文件夹中有相同的名称、数据,名为folder1、folder2、folder3,我想一次绘制不同文件夹中所有文件的第1列和第2列。换句话说,从folder1..3所在的根目录,我不想使用: p‘folder1/data’u1:2,‘folder1/data’u1:3 及 p文件夹2/数据'u 1:2',文件夹2/数据'u 1:3 同样对于folder3和其他28个文件夹,我在真实的案例中也有。 Gnuplot中是否有for命令或某些相关命令,我可以立即打印不同文件夹中的
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的调用方式——无论是否在单独的进程中
当从shell脚本调用时,您可以生成单独的子shell以在单独的窗口中生成输出,或者在C程序中,您可以为相同的目的派生单独的进程
也可以使用multiplot,请参见
你也可以在这里找到部分问题的答案
根据评论进行编辑
好的,现在我知道您想从名为folderXX的目录列表中自动构建一个打印文件,其中XX可以是当前目录下的任何内容,并且在每个文件夹中都有一个名为data的文件,您想在其中根据第2列和第3列中的每一列打印第一列,然后,您可以构建一个临时绘图文件,比如tmp.plt,方法是在folderXX列表上循环。您可以根据需要调整globbing,并使用简单的重定向输出绘图命令
例如,如下所示:
#!/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的目录中运行时,每个目录都包含一个数据文件,例如
$ tree
.
├── folder1
│ └── data
├── folder2
│ └── data
├── folder3
│ └── data
├── folder4
│ └── data
它将生成一个tmp.plt绘图文件,然后可以使用gnuplot-p tmp.plt调用该文件,例如
根据您的评论,这应该更接近您要查找的内容。请查看帮助以了解gnuplot中的循环。好像
plot for [i=1:3] "folder".i."/data" u 1:2, for [i=1:3] "folder".i."/data" u 1:3
可能就是你所需要的
是否可以在不同的窗口中为不同的文件自动创建绘图可能取决于您选择的输出终端。对于x11,您可能可以执行以下操作
do for [i=1:3] {
set term x11 i
plot "folder".i."/data" u 1:2, "" u 1:3
}
未测试。我希望避免编写56次28个文件夹x 2列,这就是为什么我想知道是否存在某种循环,因为文件名是相同的,目录名是编号的。哦-现在很清楚了。。。您可以动态构建gnuplot命令,也可以将plot命令写入文件,然后执行该命令。等一下,我来举个例子。你的文件夹是如何排序的?目录下的所有文件夹都包含数据文件吗?
do for [i=1:3] {
set term x11 i
plot "folder".i."/data" u 1:2, "" u 1:3
}