用于文件夹中许多文件的Bash + gnuplot脚本

时间:2014-12-26 11:17:14

标签: bash gnuplot

这是我几天来面临的一个问题。我想通过简单的脚本来快速完成很多工作..但脚本无法正常工作。

脚本应该:

  1. 指定目录中的3行文件$ {FOLDER}
  2. 将扩展名从.gplt更改为none。
  3. 使用gnuplot函数绘制输出。
  4. 这些文件夹中的所有文件都以:

    开头
    set term postscript color
    set output "x_101.ps"
    plot "-" title "magU" with lines
    0   0
    5.00501e-06     0.00301606
    1.001e-05   0.00603211
    ...
    

    所以我坚持这个,有些部分不起作用,这就是为什么我问你们有人可以看看这个:

    #!/bin/bash
    
    rename(){
    newname = $(basename .gplt)
    }
    
    FOLDER=(
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/H20_ReConst_v1/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/H20_ReConst_v2/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/H20_ReConst_v3/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/H20_ReConst_v4/postProcessing/sets/*
    
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/R134_ReConst_v1/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/R134_ReConst_v2/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/R134_ReConst_v3/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/R134_ReConst_v4/postProcessing/sets/*
    
    
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/OM_ReConst_v1/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/OM_ReConst_v2/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/OM_ReConst_v3/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/ReConst/OM_ReConst_v4/postProcessing/sets/*
    
    ~/Dokumenty/mgr/obliczenia_OF/PeConst/R134_PecletConst_v1/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/PeConst/R134_PecletConst_v2/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/PeConst/R134_PecletConst_v3/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/PeConst/R134_PecletConst_v4/postProcessing/sets/*
    
    ~/Dokumenty/mgr/obliczenia_OF/PeConst/OM_PecletConst_v1/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/PeConst/OM_PecletConst_v2/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/PeConst/OM_PecletConst_v3/postProcessing/sets/*
    ~/Dokumenty/mgr/obliczenia_OF/PeConst/OM_PecletConst_v4/postProcessing/sets/*
    )
    
    for file in *; do
        tail -n+3 ${file} >> ${file}
    done
    
    for ff in *; do
    rename ${ff}
    done
    
    for f in *; do
    gnuplot <<- EOF
    set terminal png size 400,250
    set output '${f}.png'
    set grid
    set xlabel 'y' rotate by 360
    set ylabel 'U(y)'
    plot "${f}" using 2:1 with lines
    EOF
    done
    

    PS。还有一件事。 FOLDERS有子文件夹,为什么我用它:

    sets/*
    

    最后我担心这可能是错的。

    干杯 jilsu。

2 个答案:

答案 0 :(得分:2)

您无法在任何地方使用FOLDER。您继续在循环中使用*。您希望在循环中使用"${FOLDER[@]}"

您的rename函数在语法上无效。 Shell分配行不需要=周围的空格。所以它需要newname=$(basename .gplt),但这只是分配一个变量而不是实际重命名任何文件。

如果你想要的只是在输出rename电话中将file.gplt更改为file.png,你也可能不需要gnuplot功能。相反,您可以在$(basename "$f" .gplt)中使用HEREDOC

答案 1 :(得分:1)

似乎有几个问题:

最后使用*的方法无效,请改用find。

find ${FOLDER[i]} -type f

我不确定你想要用那个来实现什么:

 tail -n+3 ${file} >> ${file}

它的作用是从第3行开始复制$ file的内容(你附加到你读取的文件)。