美文网首页gnuplot
通过shell脚本用gnuplot画图中的文件名问题

通过shell脚本用gnuplot画图中的文件名问题

作者: hchencoder | 来源:发表于2017-01-11 14:17 被阅读0次

    问题:

    今天在通过shell脚本用gnuplot批量画图时遇到一个问题,即各个数据文件名称不同,用“ plot 'datafile_suffix.dat' ”命令时无法正确读取到各个文件,好在文件名有相同的前缀datafile,后缀也是有规律的,可以用for循环匹配变量名,但是有点麻烦,我就用了另一个办法。

    解决:

    用“find”查找数据文件,然后把查找结果传递给变量,进而通过读取变量名画图。文字描述有点饶人,命令其实很简单(比如数据文件名为datafile_suffix.dat):

    filename=`find $dir/datafile_*`  
    echo "
    plot '$filename'
    " | gnuplot
    

    上述代码中等号前后不能有空格,且等号后的“** **”是键盘上方的数字键 1 左边那个按键,而不是单引号,其作用为“** ”之内的命令将被先执行(此处即为“ find $dir/datafile_ ”),其中的“ $dir ”为数据文件所在文件夹的名称。另外,echo** 后面必须用双引号而不是单引号,否则plot 命令后跟的变量$filename将不能正确取用。

    注: 此备注只是简单的方法思路,实际程序还要用for循环遍历所有存放数据的文件夹。

    补:有个问题不明白

    ~ # a=Documents/
    ~ # echo $a
    Documents/
    

    即将一个路径名称赋值给变量,显示正常,但是:

    ~ # i=1
    ~ # a$i=Documents/
    bash: a1=Documents/: No such file or directory
    

    即变量名中有变量代换时无法正确赋值。好像是执行$i代换就相当于执行了一步命令,所以** a$i=Documents/ 就等价于对一个名为 a1=Documents/ 的文件或文件夹操作,但并没有这个文件或文件夹,于是发生错误,此处的” = **“的变量赋值功能消失了,变成了字符串的一部分。

    不知道该如何解决,目的是批量定义变量,且变量内容为路径名称,如下(错误代码):

    for i in {1..10}; do var$i=~Documents/data$i;done
    

    相关文章

      网友评论

        本文标题:通过shell脚本用gnuplot画图中的文件名问题

        本文链接:https://www.haomeiwen.com/subject/akcrbttx.html