gnuplot的; 迭代目录中的文件以打印png

Tas*_*sha 3 gnuplot

在目录l250中我有几个文件.它们每个都以"l2_"开始,它是数值后的部分.我希望能够在last.sh文件中绘制大约300个文件的内容.我想知道我可以迭代文件的方式是什么,让它为$ 1,第二个值为$ 2.

我在想,因为文件在我可以使用的当前目录中.但后来我正在阅读awk和csv,我不知道该怎么做.我想了解什么是更好的方法来迭代大量的文件rater然后把它放在main.sh并运行它.

main.sh

sh last.sh l2_4 1
sh last.sh l2_5 2
sh last.sh l2_6 3
sh last.sh l2_7 4
.
.
.
Run Code Online (Sandbox Code Playgroud)

last.sh

gnuplot << EOF
set terminal png
set output "finished/$1.png"
set xlabel "Angs"
set ylabel "Angs"
set title "$1  |  $2 fs "
set zrange [0: 0.00001]
set pm3d map
splot "$1"
EOF
Run Code Online (Sandbox Code Playgroud)

我在命令行中运行以下命令:

$sh main.sh
Run Code Online (Sandbox Code Playgroud)

Chr*_*oph 7

首先,生成一个包含所有文件名的列表

list = system('ls l2_*')
Run Code Online (Sandbox Code Playgroud)

然后你可以迭代do for ...(需要gnuplot 4.6):

set terminal pngcairo
set xlabel "Angs"
set ylabel "Angs"
set zrange [0: 0.00001]
set pm3d map

list = system('ls l2_*')
i = 1

do for [file in list] {
    set output sprintf('finished/%s.png', file)
    set title sprintf("%s | %d fs", file, i)
    splot file
    i = i + 1
}
Run Code Online (Sandbox Code Playgroud)

  • 要提取所有`*`的最小值,请使用`min = int(system('sed"s/l2 _ // g"| sort -n | head -1'))`.也许您还必须将一些选项传递给`ls`或通过`sort -n`管道输出,以便获得正确的文件排序. (2认同)