我有一个CSV文件,我在do for []循环中逐个绘制列。我想将该图保存为PNG文件,文件名来自列标题。什么是最好的方法,将text.png替换为第i列标题?
#!/bin/bash
set datafile separator ","
set key autotitle columnhead
set xlabel "time/date"
nc = "`awk -F, 'NR == 1{ print NF; exit}' input.csv`"
set term png
do for [i = 2:5] {
set output "test.png"
plot 'HiveLongrun.csv' every::0 using i:xticlabels(1) with lines
}
答案 0 :(得分:1)
只要您使用awk,就可以再次使用它来从gnuplot宏中获取标题名称:
#!/usr/bin/env gnuplot
set datafile separator ","
set key autotitle columnhead
set xlabel "time/date"
nc = "`awk -F, 'NR == 1{ print NF; exit}' input.csv`"
# Define a macro which, when evaluated, assigns the ith column header
# to the variable 'head'
awkhead(i) = "head = \"\`awk -F, 'NR == 1 {print $".i."}' input.csv\`\""
set term png
do for [i = 2:5] {
eval awkhead(i) # evaluate the macro
set output head.".png" # use the 'head' variable assigned by the macro
plot 'HiveLongrun.csv' every::0 using i:xticlabels(1) with lines
}
使用另一个类似awk的实用程序,甚至在gnuplot中,几乎可以肯定有更简洁的方法。 Gnuplot提供了一些运行任意内部/外部命令的方法,正如您从我的反面和宏观评估中看到的那样。
顺便说一下,如果你在脚本的开头有bash shebang(#!/bin/bash
),如果它可能被gnuplot解释,那对我来说有点奇怪。我假设您将其称为gnuplot myscript.plt
。在这种情况下,shebang只是一个注释(就gnuplot而言)并没有做任何事情,因为gnuplot是解释器。在我的示例中,我使用#!/usr/bin/env gnuplot
并将脚本作为bash中的可执行文件运行,如./myscript.plt
。在这种情况下,shebang告诉bash使gnuplot成为解释器(或者通过在命令提示符下键入gnuplot
获得的任何命令)。当然,如果你不担心路径的变化,你也可以将shebang设置为#!/usr/bin/gnuplot
。