1

CSV ファイルがあり、do for[] ループで列を 1 つずつプロットしています。プロットを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
}
4

1 に答える 1

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 は、任意の内部/外部コマンドを実行するいくつかの方法を提供します。これは、バックティックとマクロ評価の組み合わせからわかるようにです。

ところで、#!/bin/bashgnuplot によって解釈される可能性がある場合、スクリプトの先頭に bash shebang ( ) があるのは少し奇妙です。と呼ぶとしgnuplot myscript.pltます。この場合、シバンは単なるコメント (gnuplot に関する限り) であり、gnuplot がインタープリターであるため何もしません。私の例では#!/usr/bin/env gnuplot、スクリプトを bash の実行可能ファイルとして実行し./myscript.pltます。この場合のシバンは、bash に gnuplot をインタープリター (またはgnuplot、コマンド プロンプトで入力して得られる任意のコマンド) にするように指示します。もちろん#!/usr/bin/gnuplot、パスの変更を心配していない場合は、シバンを に設定することもできます。

于 2012-12-21T20:22:57.177 に答える