我需要同时在目录中绘制我拥有的所有文本文件。我用gnuplot单独绘制它们,它工作正常。所以我的数据还可以。但是由于文件太多,我正在寻找一个脚本来为我做这件事。
我尝试按照here指令进行操作,因此请在gnuplot中输入
a=system('a=`tempfile`;cat *.txt > $a;echo "$a"')
plot a u 3:2
但是我收到了这个错误:
plot a u 3:2
^
warning: Skipping data file with no valid points
^
x range is invalid
Ady想法?
我是gnuplot的新手,所以我真的不明白plot a u 3:2
应该做什么。
答案 0 :(得分:0)
u 3:2
表示将第3列与第2列对比。
你没有这样的专栏,也没有情节 - 很容易。
误用using
。
绘图,修改最初找到的解决方案
a=system('a=`tempfile`; awk "{if ((FNR==1) && (NR!=1)) {printf \"\n\n\"}; print \$0}" *.txt > $a;echo $a;')
plot a u 1:2:(column(-2)) with lines lc variable
system
使Unix系统调用在shell中执行一些命令(字符串)。
字符串放在括号内的单引号或双引号中:system('...')
。
tempfile
是一个用于创建临时文件的Linux实用程序。
要绘制具有不同颜色的文件,可以使用lc variable
选项gnuplot
。它需要将数据分成块。我们使用 两个空白行 来分隔块。
awk
可以处理多个文件:awk '...' list_of_files...
,我使用双引号awk "<command>"
来区分这些引号和来自system
命令的引号。
awk "{if ((FNR==1) && (NR!=1)) {printf \"\n\n\"}; print \$0}" *.txt
如果我们有一些文件(FNR==1)
的第一行,而不是第一个文件(处理的记录总数NR!=1
),我们应该打印两个空白行printf \"\n\n\"
来缩进新文件阻止gnuplot
。
print \ $ 0打印完整行($0
)。双向引号\“在换行符号\n
和$
之前被转义为不会被shell展开 - " "
的缺点(即使,它足以告诉awk
: print
)。
示例:
==1.txt==
1 1
2 2
3 3
==2.txt==
4 1
5 2
6 3
==3.txt==
7 0
7 2
8 4
8 2
awk
命令的输出(参见上面的命令):
1 1
2 2
3 3
4 1
5 2
6 3
7 0
7 2
8 4
8 2
plot a u 1:2:(column(-2)) with lines lc variable
使gnuplot
绘制第二列与第一列,使用其索引为每个数据块着色。使用特殊gnuplot
变量获取数据块索引:(column(-2))
。