使用 cat、awk 或 sed (bash) 的多个文件的热图

Heat map from multiple files with cat, awk or sed (bash)

我正在处理多个文件,我想根据这些文件绘制热图 every ::121::600 using 3:25:43。 有没有办法通过以下命令动态组合所有文件以获得热图:

set dgrid3d
splot '< cat data1.csv data2.csv data3.csv data4.csv' every ::121::600 using 3:25:43 w pm3d

我试过了,但似乎只有来自 data1.csv 的数据出现在图中。我对 ', 做错了什么吗? awksed 是一个选项吗?

我知道 set table 这个选项,但我更喜欢一个干净的 bash 命令选项来直接即时进行。

有没有好的资源来查找所有带有一些 gnuplot 演示的 unix 命令?

目前感谢您的回复: 所以 ' 用于绘图命令:例如plot 'data1.csv' using 1:2 w l 将使用行从 data1 文件中的第 2 行打印第 1 行。这就是为什么我以前在命令中使用 ' 的原因。我在 Site 那里找到了这个 bash 枪图命令的解释,但我仍然没有找到我要找的东西

感谢您对我的问题的大力回应和帮助: 这有效:

plot '< for i in data1.csv data2.csv data3.csv data4.csv; do cat "$i"; echo; done'  every ::121::600 using 3:25:43 w pm3d

值得一提的是,我确实不得不在 $i 周围添加 " 广告,就像 vagoberto 提议的那样

这也是一样的:

plot '< awk "FNR==1{print \"\"}1" data1.csv data2.csv data3.csv data4.csv' every ::121::600 using 3:25:43 w pm3d

两者都适用于我的 Mac OSX 终端环境,以及安装了 gnuWin32 软件包的 Wind 7。

every ::121::600 命令告诉 gnuplot 在 每个块 上获取第 121 行到 600 行(从 0 开始计数)的数据,而不是在每个文件上。您需要预处理数据以创建块(在每个数据之间放置一条线)。

考虑以下两个数据文件:

#data1.dat          #data2.dat 
1 2                 1.5 2.5           # line 0
3 4                 3.5 4.5           # line 1
5 6                 5.5 6.5           # line 2

并尝试使用 every ::2::2 绘制(即仅绘制第 2 行)。

以下指令创建单个块,因此 gnuplot 将仅绘制点 (5,6):

cat data1.dat data2.dat
1 2
3 4
5 6
1.5 2.5
3.5 4.5
5.5 6.5

以下指令将为每个数据文件创建一个块,以便 gnuplot 绘制点 (5,6)(5.5,6.5):

for i in data*.dat; do cat $i; echo; done
1 2
3 4
5 6

1.5 2.5
3.5 4.5
5.5 6.5

您将通过使用 awk 'FNR==1{print ""}1' data*.dat 获得类似的结果。

总而言之,以下应该有效:

plot '< for i in data*.dat; do cat $i; echo; done' every ::2::2 using 1:2

# or
plot '< awk "FNR==1{print \"\"}1" data*.dat' every ::2::2 using 1:2