我的文件夹结构看起来像这样
$ tree
.
├── Original_folder
│ └── cat.txt
├── folderCD
│ └── cat.txt
├── folderGK
│ └── cat.txt
├── folderFE
└── cat.txt
每个 cat.txt 文件在开始列标题之前有 5 行。示例 cat.txt 文件是这样的
Version LRv1.10.0
Build date 2017-12-06
MOL-calc
PRESSURE
!
Time[s] InletT[K] InletP[Pa] O2_GasOut C_GasOut
100 0.000885 1000000 0.0007 0.2111
and so on....
我想绘制第一列以及列标题带有关键字“_GasOut”的列。(此关键字的标题数量未知,对于每一列我想有一个单独的图表)。此外,对于folderCD、folderGK、folderFE……等所有图形,Original_folder 的图形结果应绘制在同一个图形中。
相应的图表应保存在相应的文件夹中,其标题与列标题相同。在每个图表中应该有两个图例一个是“original_folder”,另一个是“folderCD/folderGK/......”
我将 Original_folder 的所有输出绘图命令都放在一个 txt 文件中,并将所有其他文件夹的绘图命令放在另一个 txt 文件中。在那之后我没有找到继续前进的方法。我怎样才能为所有其他情况做到这一点?以及如何将列标题作为标题?
最近更新
for dir in folder* ; do
echo "Preparing Post_processing files for ${dir}"
mkdir "$dir"/Post_processing
gawk -F $'\t' '
/_GasOut/{
for(f=1;f<=NF;f++){
hdr=$f
colhdr[f]=hdr
if(index(hdr,"_GasOut"))wanted[f]=1
}
}
ENDFILE{
print "reset\nset terminal pngcairo size 1024,768\nset encoding utf8\nset termoption dash\nset termopt enhanced"
print "set key top right"
print "set xlabel '"'Time[s]'"';"
for(f in wanted){
if(length(cmds)) cmds = cmds ",\n"
hdr = colhdr[f]
gsub(/^[[:space:]]+|[[:space:]]+$/,"",hdr)
printf("set ylabel '"'%s'"';\n",hdr)
printf("set output '"'"$dir/Post_processing"/%s.png'"'\n",hdr)
cmds = cmds "plot ""\"" FILENAME "\" using 1:" f " with lines" ","
#print "plot " FILENAME using 1:" f " with lines" ",""
cmds=cmds"'"'Original_folder/cat.txt'"' using 1:" f " with lines"
}
delete wanted
}
END{
print cmds
}
' "$dir"/cat.txt>"$dir"/plot.gpl
gnuplot "$dir"/plot.gpl
done
电流输出是这样的
reset
set terminal pngcairo size 1024,768
set encoding utf8
set termoption dash
set termopt enhanced
set xlabel 'Time[s]';
set ylabel 'H2_GasOut';
set output 'folderCD/Post_processing/H2_GasOut.png'
set ylabel 'O2_GasOut';
set output 'folderGK/Post_processing/O2_GasOut.png'
set ylabel 'H2O_GasOut';
set output 'folderFE/Post_processing/H2O_GasOut.png'
plot "folderCD/cat.txt" using 1:28 with lines,'Original_folder/cat.txt' using 1:28 with lines,
plot "folderGK/cat.txt" using 1:29 with lines,'Original_folder/cat.txt' using 1:29 with lines,
plot "folderGK/cat.txt" using 1:30 with lines,'Original_folder/cat.txt' using 1:30 with lines
期望的输出
reset
set terminal pngcairo size 1024,768
set encoding utf8
set termoption dash
set termopt enhanced
set xlabel 'Time[s]';
set ylabel 'H2_GasOut';
set output 'folderCD/Post_processing/H2_GasOut.png'
plot "folderCD/cat.txt" using 1:28 with lines,'Original_RedKinMec/cat.txt' using 1:28 with lines,
set ylabel 'O2_GasOut';
set output 'folderGK/Post_processing/O2_GasOut.png'
plot "folderGK/cat.txt" using 1:29 with lines,'Original_folder/cat.txt' using 1:29 with lines,
set ylabel 'H2O_GasOut';
set output 'folderFE/Post_processing/H2O_GasOut.png'
plot "folderGK/cat.txt" using 1:30 with lines,'Original_folder/cat.txt' using 1:30 with lines
有这样的输出也很好
set terminal pngcairo size 1024,768
set encoding utf8
set termopt dash
set termopt enhanced
set key top right
set xlabel "Time[s]"
set ylabel "O2_GasOut"
set output "Post_processing/O2_GasOut.png"
plot "folder1/cat.txt" using 1:22 with lines,\
plot "folder2/cat.txt" using 1:22 with lines,\
plot "folder3/cat.txt" using 1:22 with lines,\
plot "folder4/cat.txt" using 1:22 with lines
set ylabel "H2O_GasOut"
set output "Post_processing/H2O_GasOut.png"
plot "folder1/cat.txt" using 1:23 with lines,\
plot "folder2/cat.txt" using 1:23 with lines,\
plot "folder3/cat.txt" using 1:23 with lines,
plot "folder4/cat.txt" using 1:23 with lines
set ylabel "H2_GasOut"
set output "Post_processing/H2_GasOut.png"
plot "folder1/cat.txt" using 1:24 with lines,\
plot "folder2/cat.txt" using 1:24 with lines,\
plot "folder3/cat.txt" using 1:24 with lines,\
plot "folder4/cat.txt" using 1:24 with lines
N.B: folder numbers are not fixed.
I added one of the cat.txt file for reference. https://1drv.ms/t/s!Aoomvi55MLAQh1wMmpnPGnliFmgg
首先让我们拆分脚本,以便我们有一个
bash
脚本和一个awk
脚本文件。这样,您将需要在脚本中进行较少的转义,并且可以使用-optionbash
将变量转发到其中。awk
-v
该
bash
脚本现在相当简单。脚本中的一些更正和简化
awk
- 我希望评论解释得很好:使用脚本和您创建的示例绘图文件
cat.txt
:请注意,图中 y 标签的格式可能是错误的,但我不确定所需的格式。
_
将使以下字符下标为termopt enhanced
. 要使更多字符变为下标,请使用括号,例如C_6H_{12}O_6
糖的分子式。