Awk线在终端中工作,但不在Gnuplot图中

时间:2019-05-23 15:42:27

标签: shell awk gnuplot

我将数据保存在CSV文件中,该数据从第8行开始。 有很多列,但我想显示$ 46和$ 47。

我尝试过:

set encoding iso_8859_1
set key right bottom font "Helvetica,16" 
set ylabel "Average inventory ratio, {/Symbol g} [inventoried/total]" font "Helvetica,19"
set xlabel "Average time in system, {/Helvetica=19 @^{/=18-}T} [s] " font "Helvetica,19"

set xtics font "Helvetica,16"
set ytics font "Helvetica,16"
set terminal postscript eps enhanced color
set grid
set key spacing 1
set key title "Min. Stock 80%"
set key box
set output "_known_T.eps"
set datafile separator ","
plot "ratio_T.csv" every::8::18 using 46:47 w linespoints ls 20

enter image description here

效果很好,但我需要按列$ 46对数据进行排序,以绘制结果。

我已经尝试了下AWK行:

awk -F, 'NR>8{ print $46, $47 }' ratio_T.csv | sort -nk46 | tr '",' ' '

如果在Terminal中执行,但不能与Gnuplot一起使用,则可以正常工作,从而实现:

plot '<awk -F, 'NR>8{ print $46, $47 }' ratio_T.csv | sort -nk46' u 1:2  w points ls 20

与此link中的CSV文件链接。

1 个答案:

答案 0 :(得分:2)

您不能嵌套引号(例如您可以嵌套括号,例如((()())))。相反,您可以在双引号中混合使用单引号,例如:

plot "<awk -F, 'NR>8{print $46, $47}' ratio_T.csv|sed 's/\"//g'|sort -nk1" ...

或者,如果您愿意,也可以在单引号中使用2个单引号,它们会变成单引号,这不太明显,例如:

plot '<awk -F, ''NR>8{print $46, $47}'' ratio_T.csv|sed ''s/"//g''|sort -nk1' ...

请注意,在"..."内使用反斜杠\时要小心,因为反斜杠用于转义八进制字符代码,换行符和"(例如"\033 \" \n")。