如何使用gnuplot和awk同时迭代日志文件列表

时间:2015-05-08 18:38:48

标签: awk gnuplot

我正在使用awk和gnuplot来提取一些运行时间和它们的平均值,它们是一系列名为bt.B。*。log的日志文件依赖于进程的数量,其中*可以是1,4,9和16(那些是过程的数量)。

我在枪号下运行的代码是

system "awk 'BEGIN { FS = \"[ \\t]*=[ \\t]*\" }  /Time in seconds/ { s += $2; c++ } /Total processes/ { if (! CP) CP = $2 } END { print CP, s/c }' bt.B.1.log > tavg.dat"
system "awk 'BEGIN { FS = \"[ \\t]*=[ \\t]*\" }  /Time in seconds/ { s += $2; c++ } /Total processes/ { if (! CP) CP = $2 } END { print CP, s/c }' bt.B.4.log >> tavg.dat"
system "awk 'BEGIN { FS = \"[ \\t]*=[ \\t]*\" }  /Time in seconds/ { s += $2; c++ } /Total processes/ { if (! CP) CP = $2 } END { print CP, s/c }' bt.B.9.log >> tavg.dat"
system "awk 'BEGIN { FS = \"[ \\t]*=[ \\t]*\" }  /Time in seconds/ { s += $2; c++ } /Total processes/ { if (! CP) CP = $2 } END { print CP, s/c }' bt.B.16.log >> tavg.dat"
system "awk 'BEGIN { FS = \"[ \\t]*[=][ \\t]\" }  /Time in seconds/ { printf \"%s\", $2 } /Total processes/ { if (CP) { printf \"\\n\" } else { CP = $2; printf \"%s\\n\", $2 } }' bt.B.1.log > t.dat"
system "awk 'BEGIN { FS = \"[ \\t]*[=][ \\t]\" }  /Time in seconds/ { printf \"%s\", $2 } /Total processes/ { if (CP) { printf \"\\n\" } else { CP = $2; printf \"%s\\n\", $2 } }' bt.B.4.log >> t.dat"
system "awk 'BEGIN { FS = \"[ \\t]*[=][ \\t]\" }  /Time in seconds/ { printf \"%s\", $2 } /Total processes/ { if (CP) { printf \"\\n\" } else { CP = $2; printf \"%s\\n\", $2 } }' bt.B.9.log >> t.dat"
system "awk 'BEGIN { FS = \"[ \\t]*[=][ \\t]\" }  /Time in seconds/ { printf \"%s\", $2 } /Total processes/ { if (CP) { printf \"\\n\" } else { CP = $2; printf \"%s\\n\", $2 } }' bt.B.16.log >> t.dat"
#set xrange [0:20]
#set yrange [0:300]
set encoding iso_8859_1
set xlabel "Número de processos"
set ylabel "Tempo médio de execução (s)"
set border 3
set rmargin 10
unset key
set title "bt.B.*.log"
set tics nomirror
set mxtics
set mytics
set arrow from graph 1,0 to graph 1.05,0 filled
set arrow from graph 0,1 to graph 0,1.05 filled
plot "tavg.dat" using 1:2 smooth bezier title "bt.b.*.log", '' using 1:2 with points ps 3 title ""

请注意,我这样做的方式是使用>创建文件tavg.dat。在第一个系统命令中,然后使用>>将其他结果附加到同一文件。用于创建t.dat文件的组织相同。

这里的问题是如何迭代4个日志文件以避免在脚本中重复。

1 个答案:

答案 0 :(得分:0)

只需定义两个函数,即生成适当的字符串,您可以将其赋予system函数:

tavg(n) = "awk 'BEGIN { FS = \"[ \\t]*=[ \\t]*\" }  /Time in seconds/ { s += $2; c++ } /Total processes/ { if (! CP) CP = $2 } END { print CP, s/c }' bt.B.".n.".log ".(n == 1 ? ">" : ">>")." tavg.dat;"
t(n) = "awk 'BEGIN { FS = \"[ \\t]*[=][ \\t]\" }  /Time in seconds/ { printf \"%s\", $2 } /Total processes/ { if (CP) { printf \"\\n\" } else { CP = $2; printf \"%s\\n\", $2 } }' bt.B.".n.".log ".(n == 1 ? ">" : ">>")." t.dat;"

do for [n in "1 4 9 16"] { system(tavg(n).t(n)) }
...
plot "tavg.dat" ...