绘制多个文件以产生多个输出
Plot multiple files to produce multiple outputs
我有一系列文件(在同一目录中),其中包含简单的 2 列数据,所有文件都命名为 file-%d,其中 %d 是当前日期(因此 file-20200721、file-20200720 等),我想通过一个脚本绘制所有这些并获得与输入文件同名的 png 输出 (file-20200721.png).
到目前为止我一直在尝试这个:
set term pngcairo enhanced size 1024, 768
set xdata time
set timefmt "%H:%M:%S"
set xrange ["00:00:00":"23:59:59"]
set format x "%H:%M:%S"
set grid
do for [i=20200101:21000101] {
fname_in = sprintf("file-%d.log",i)
fname_out = sprintf("file-%d.png",i)
set output fname_out
splot fname_in u 1:2
}
set output
但它根本没有设置正确的输出(只有一个输出,不正确的文件名,也不是真正的 png)。
欢迎任何帮助。
您确定要从 20200101
循环到 21000101
并检查 800'000 个可能的文件名吗?
也许你的意思是 20210101
?无论如何,我不知道 gnuplot 有一个 file_exist()
函数。
为此,我想你必须去操作系统级别。
您可以执行系统调用(检查 help system
)并获取符合您的命名约定的文件列表。
我想路径和文件不应该包含空格(否则你必须将列表项放在引号中)。
代码:
### loop files in a directory and plot to PNG
reset session
set term pngcairo
myPathWindows = 'C:\user\data\file-*.log' # for Windows
LIST = system('dir /b "'.myPathWindows.'"')
# myPathLinux = 'C:/user/data/file-*.log' # for Linux
# LIST = system('ls "'.myPathLinux.'"')
do for [FILE in LIST] {
set output FILE[1:strlen(FILE)-4].".png" # take input filename and change extension to ".png"
plot FILE u 1:2
}
set output
### end of code
Linux 在尝试绘制文件之前测试文件是否存在的循环版本。
do for [i=20200101:20200111] {
fname_in = sprintf("file-%d.log",i)
fname_out = sprintf("file-%d.png",i)
test_command = "if [ -e " . fname_in . " ]; then echo 'exists'; fi"
if (system(test_command) ne "exists") {
print "Missing file: ", fname_in
continue
}
set output fname_out
splot fname_in u 1:2
}
set output
我有一系列文件(在同一目录中),其中包含简单的 2 列数据,所有文件都命名为 file-%d,其中 %d 是当前日期(因此 file-20200721、file-20200720 等),我想通过一个脚本绘制所有这些并获得与输入文件同名的 png 输出 (file-20200721.png).
到目前为止我一直在尝试这个:
set term pngcairo enhanced size 1024, 768
set xdata time
set timefmt "%H:%M:%S"
set xrange ["00:00:00":"23:59:59"]
set format x "%H:%M:%S"
set grid
do for [i=20200101:21000101] {
fname_in = sprintf("file-%d.log",i)
fname_out = sprintf("file-%d.png",i)
set output fname_out
splot fname_in u 1:2
}
set output
但它根本没有设置正确的输出(只有一个输出,不正确的文件名,也不是真正的 png)。
欢迎任何帮助。
您确定要从 20200101
循环到 21000101
并检查 800'000 个可能的文件名吗?
也许你的意思是 20210101
?无论如何,我不知道 gnuplot 有一个 file_exist()
函数。
为此,我想你必须去操作系统级别。
您可以执行系统调用(检查 help system
)并获取符合您的命名约定的文件列表。
我想路径和文件不应该包含空格(否则你必须将列表项放在引号中)。
代码:
### loop files in a directory and plot to PNG
reset session
set term pngcairo
myPathWindows = 'C:\user\data\file-*.log' # for Windows
LIST = system('dir /b "'.myPathWindows.'"')
# myPathLinux = 'C:/user/data/file-*.log' # for Linux
# LIST = system('ls "'.myPathLinux.'"')
do for [FILE in LIST] {
set output FILE[1:strlen(FILE)-4].".png" # take input filename and change extension to ".png"
plot FILE u 1:2
}
set output
### end of code
Linux 在尝试绘制文件之前测试文件是否存在的循环版本。
do for [i=20200101:20200111] {
fname_in = sprintf("file-%d.log",i)
fname_out = sprintf("file-%d.png",i)
test_command = "if [ -e " . fname_in . " ]; then echo 'exists'; fi"
if (system(test_command) ne "exists") {
print "Missing file: ", fname_in
continue
}
set output fname_out
splot fname_in u 1:2
}
set output