这个想法与@andyras 相同,但使用stats
.
要回答标题,您可以使用every ::n::n
,其中 n 是选择的记录(即数据点)编号。记录从 0 开始编号,所以如果你想要第一行,它应该是every ::0::0
. every
可用于plot
, splot
, 或stats
(every
instats
的用法未记录)。我更喜欢stats
它,因为它不绘制任何东西,但它确实使您的 gnuplot 控制台混乱(编辑以避免nooutput
在命令末尾使用混乱的控制台stats
)。此外,您可以using
用来进行任意分配。
例如,要保存第一条记录的第二列,
stats "my2columndata.dat" u (firstdatapoint=$2) every ::0::0
现在要获取最后一条记录,您可以使用 保存stats
的记录数,并将其用作 中的记录号every
,
stats "my2columndata.dat" # this saves the number of records to STATS_records
stats "my2columndata.dat" u (lastdatapoint=$2) every ::STATS_records-1::STATS_records-1
现在你可以做你要求的情节。
在我完成之前,还有一些额外的技巧:
使用mgilson 的计数列的想法,您甚至可以将每一列保存到多个变量中。(注意:我使用和u
for的简写)using
ev
every
filename = "yourfilename.dat"
r = 0 # record number
good = 1
col = 1
while (good) {
stats filename u (good=valid(col)) ev ::r::r
if (good) {
stats filename u col ev ::r::r
eval(sprintf("v%d=STATS_max",col))
col = col+1
}
}
如果数据文件包含 8 列,那么现在定义v1
了 to 。v8
但我认为使用外部工具是正确的方法(类 UNIX 可以使用 tail/head 等)。让我们责怪 gnuplot 作者使这成为可能:)