File Gnuplot:从编号和文件打印
我有几个文件,每个文件都有相同的行数。文件名为“something_integer.txt”,如“a100.txt”、“a200.txt”、“a300.txt”。。。所以(整数是每100个,有些东西总是一样的)。每一行都与其他文件的同一行及时连接,但不与其他行连接 我想在一个图形中绘制所有文件的所有第1行,在另一个图形中绘制所有文件的所有第2行(但与前一个图形重叠),依此类推。如何使用gnuplot实现这一点 我知道我需要使用for循环。我的想法是(仅针对第1行和第2行): 但问题出现了:File Gnuplot:从编号和文件打印,file,for-loop,plot,gnuplot,File,For Loop,Plot,Gnuplot,我有几个文件,每个文件都有相同的行数。文件名为“something_integer.txt”,如“a100.txt”、“a200.txt”、“a300.txt”。。。所以(整数是每100个,有些东西总是一样的)。每一行都与其他文件的同一行及时连接,但不与其他行连接 我想在一个图形中绘制所有文件的所有第1行,在另一个图形中绘制所有文件的所有第2行(但与前一个图形重叠),依此类推。如何使用gnuplot实现这一点 我知道我需要使用for循环。我的想法是(仅针对第1行和第2行): 但问题出现了: 我之
第一个问题很简单:必须使用括号
使用(i):5
如果我理解正确,对于第二个,您必须在绘图中移动循环:
plot for [i=100:5000:100] \
sprintf('something_%d.txt',i) every 1::1::1 using (i):5, \
sprintf('something_%d.txt',i) every 1::2::2 using (i):5
这就是你想要的吗?我认为在gnuplot中尝试这样做是过分的(但我喜欢过分的解决方案!)。最好使用awk
或类似的工具在bash中进行一些预处理。但是,您仍然可以在gnuplot代码中使用awk
命令。这正是您想要的:
loop = ""; do for [i=100:5000:100] { loop = sprintf("%s %i", loop, i) }
file(n) = "< for i in ".loop."; do awk -v i=$i 'NR==".n."{print i, $5}' a${i}.txt; done"
plot file(1) w l, file(2) w l
loop=”“;为[i=100:5000:100]{loop=sprintf(“%s%i”,loop,i)}
文件(n)=“
n
是您正在选择的行,因此文件(1)
选择所有文件中的第1行,文件(2)
选择所有文件中的第2行,依此类推。不完全正确。这对于开始来说是可以的,但我想用一条线连接第1行的所有点,用另一条线连接第2行的所有点。这样,每个点都像一系列的数据。
loop = ""; do for [i=100:5000:100] { loop = sprintf("%s %i", loop, i) }
file(n) = "< for i in ".loop."; do awk -v i=$i 'NR==".n."{print i, $5}' a${i}.txt; done"
plot file(1) w l, file(2) w l