Gnuplot从文件到某行打印数据

Gnuplot从文件到某行打印数据,plot,gnuplot,Plot,Gnuplot,我有一些文本文件中的数据,比如说10000行和2列。我知道,我可以通过使用1:2和行打印“filename.txt”来轻松打印它。然而,我想要的只是绘制,比如说从1000到2000的行或任何其他合理的选择。这样做容易吗?事先非常感谢 看来您正在寻找的是gnuplot中的: plot "filename.txt" every ::1000::2000 using 1:2 with lines 或者,预处理文件以选择感兴趣的行。例如,使用awk: awk "NR>=1000 &&am

我有一些文本文件中的数据,比如说10000行和2列。我知道,我可以通过
使用1:2和行打印“filename.txt”来轻松打印它。然而,我想要的只是绘制,比如说从1000到2000的行或任何其他合理的选择。这样做容易吗?事先非常感谢

看来您正在寻找的是gnuplot中的:

plot "filename.txt" every ::1000::2000 using 1:2 with lines
或者,预处理文件以选择感兴趣的行。例如,使用awk:

awk "NR>=1000 && NR<=2000" filename.txt > processed.txt
awk“NR>=1000&&NR更简单:

plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines

plot”我推荐一些命令行工具,如
sed
grep
bash
。在你的例子中

head -n 2000 ./file.data > temp.data


可能有用。但是还没有测试过这样大的数字是否适用于head和tail。

您可能可以使用伪列0消除对外部实用程序的依赖(例如,如果您的系统没有安装它们)

请参阅
帮助使用伪列打印数据文件

尝试以下方法:

LINEMIN=1000
LINEMAX=2000

#create a function that accepts linenumber as first arg
#an returns second arg if linenumber in the given range.
InRange(x,y)=((x>=LINEMIN) ? ((x<=LINEMAX) ? y:1/0) : 1/0)

plot "filename.txt" using (InRange($0,$1)):2 with lines
LINEMIN=1000
LINEMAX=2000
#创建一个接受linenumber作为第一个参数的函数
#如果行号在给定范围内,则返回第二个参数。

InRange(x,y)=((x>=LINEMIN)?((xGnuplot忽略NaN值。这对我来说适用于x坐标的指定范围。但不确定如何指定行范围

cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))

cutoff(c1,c2,xmin,xmax)=(c1>=xmin)*(c1有什么好的在线资料可以让我学习这种很棒的小技巧。谢谢你的回复。下面的答案是一个更好的选择!如果你在linux或mac osx上,你应该已经有了awk(它是标准*nix工具集的一部分,如sed和grep).I将首先运行上述命令作为预处理步骤(在启动gnuplot之前),这将创建一个新的数据文件“processed.txt”,同时保持现有文件不受损坏。然后应使用“processed.txt”代替“filename.txt”在您的绘图命令中。awk手册可以在这里找到:也许这也可以帮助您:这与第一个答案结合起来帮助了我:绘图“
cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))