Gnuplot 打印多个文件以生成多个输出

Gnuplot 打印多个文件以生成多个输出,gnuplot,Gnuplot,我有一系列文件(在同一目录中),包含简单的2列数据,所有命名文件-%d,其中%d是当前日期(因此文件-20200721、文件-20200720等),我希望通过一个脚本绘制所有文件,并获得与输入文件同名的png输出(文件-20200721.png) 到目前为止,我一直在尝试: set term pngcairo enhanced size 1024, 768 set xdata time set timefmt "%H:%M:%S" set xrange ["00:0

我有一系列文件(在同一目录中),包含简单的2列数据,所有命名文件-%d,其中%d是当前日期(因此文件-20200721、文件-20200720等),我希望通过一个脚本绘制所有文件,并获得与输入文件同名的png输出(文件-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
循环到
2100101
并检查80万个潜在文件名吗? 也许你的意思是
20210101
?无论如何,我不知道gnuplot有一个
file\u exist()
函数。 为此,我想您必须进入操作系统级别

您可以执行系统调用(选中“帮助系统”),并获取不符合命名约定的文件列表。 我想路径和文件不应该包含空格(否则您必须将列表项放在引号中)

代码:

### 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

是否确实要从
20200101
循环到
2100101
并检查80万个潜在文件名? 也许你的意思是
20210101
?无论如何,我不知道gnuplot有一个
file\u exist()
函数。 为此,我想您必须进入操作系统级别

您可以执行系统调用(选中“帮助系统”),并获取不符合命名约定的文件列表。 我想路径和文件不应该包含空格(否则您必须将列表项放在引号中)

代码:

### 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

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

啊,所以splot是错误的(plot将创建正确的图形),但是gnuplot在找到第一个不存在的文件时就停止了。如何跳过不存在的文件?啊,所以splot是错误的(plot将创建正确的图形),但是gnuplot在找到第一个不存在的文件时就停止了。如何跳过不存在的文件?theozh:下一次迭代中的“设置输出”将自动关闭上一个文件。这只是需要单独关闭的最后一个。因此,所示的原始代码是正确的。@Ethan,谢谢你提到这一点。我将在我的代码中更正它。您能确认Linux目录列表是否正确吗?theozh:路径中的斜杠走错了方向。但是,请参阅单独的答案,了解测试文件是否存在的方法,以便跳过缺少的文件。theozh:下一次迭代中的“设置输出”将自动关闭上一个文件。这只是需要单独关闭的最后一个。因此,所示的原始代码是正确的。@Ethan,谢谢你提到这一点。我将在我的代码中更正它。您能确认Linux目录列表是否正确吗?theozh:路径中的斜杠走错了方向。但是,请参阅单独的答案,了解测试文件是否存在的方法,以便跳过缺少的文件。嗯,这就是我需要的。谢谢当你这么做的时候,有没有办法跳过已经画好的?嗯,这就是我需要的。谢谢当你这样做的时候,有没有办法跳过已经绘制好的?