我正在尝试使用 gnuplot 来比较多个数据文件。我使用 ls
命令通过列表获取这些文件,然后绘制这些文件。
List = "`echo $(ls GRID/3D/Ratio_5/DATA.dat.* | sort -V )`"
这为我提供了代表不同时间的文件 DATA.dat.0001 DATA.dat.0002 ... DATA.dat.0100
的列表,然后我可以使用它们来绘制
plot for [i in List] i u 1:2 title system('basename '.i)
在那种情况下,没有问题。然而,在某些情况下,我需要比较不同的 Ratio_
目录(这里没有时间依赖性),所以我创建了我的列表
List = "`echo $(ls GRID/3D/Ratio_*/DATA.dat | sort -V )`"
但是相同的绘图命令为我的所有系列赋予了相同的名称:DATA.dat
。我试过了
plot for [i in List] i u 1:2 title system('dirname '.i)
但它会打印除 DATA.dat
之外的整个路径,我只对 Ratio_
数字感兴趣。
我创建了一个函数来从文件名字符串中提取比率
Ratio(filename) = "awk -F / '{print $3}' ".filename
plot for [i in List] i u 1:2 title Ratio(i)
但它只是为每个数据系列打印整个 awk -F/'{print $3}' GRID/3D/Ratio_1/DATA.dat
。我试图在 Ratio(filename)
的定义中添加一个 system
调用但没有成功
Ratio(filename)=system("awk '{print $3}' " .filename)
plot for [i in List] i u 1:2 title Ratio(i)
但现在每个数据系列的名称都类似于相应 DATA.dat 的整个第 3 列,有几百行。
我没主意了。这可能只是一个简单的语法问题,一个错位的引号、点或逗号。我知道我可以在 3D
目录中调用我的 gnuplot 脚本并使用 dirname
选项,但这不是我想要的。我将此脚本与放置在同一目录中的许多其他脚本一起调用,为科学文章创建图,将这些脚本放在不同的地方会很乱。
感谢任何帮助。谢谢
最佳答案
当你做的时候
Ratio(filename) = "awk -F / '{print $3}' ".filename
你只是在创建一个字符串,而不是执行它。此外,当您这样做时
Ratio(filename)=system("awk '{print $3}' " .filename)
您要求 awk 解析文件的内容,而不是文件名。尝试:
Ratio(filename)=system("echo ".filename." | awk -F / '{print $3}'")
关于awk - 使用 awk 根据文件名在 gnuplot 中设置数据系列的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26747967/