来自cat,awk或sed(bash)的多个文件的热图

时间:2015-10-18 17:56:14

标签: bash gnuplot

我正在处理多个文件,我想从这些文件中绘制热图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附近提出广告

这也是一样的:

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终端环境和Wind 7上都安装了gnuWin32软件包。

1 个答案:

答案 0 :(得分:2)

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