使用gnuplot绘制目录中的所有文本文件

时间:2016-02-04 00:18:28

标签: shell gnuplot

我需要同时在目录中绘制我拥有的所有文本文件。我用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应该做什么。

1 个答案:

答案 0 :(得分:0)

u 3:2表示将第3列与第2列对比。

你没有这样的专栏,也没有情节 - 很容易。

误用using

更新:
如何用不同的颜色绘制每个文件,以及`system(...)`的含义是什么

绘图,修改最初找到的解决方案

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展开 - " "的缺点(即使,它足以告诉awkprint)。

示例:

==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))