awk - 使用 awk 根据文件名在 gnuplot 中设置数据系列的标题

标签 awk gnuplot

我正在尝试使用 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/

相关文章:

linux - Bash 或 Awk 脚本合并 X 个字段匹配的行,同时在不匹配的字段中创建范围

Gnuplot pm3d map : different x2tics, y2tics

gnuplot - 在 gnuplot 标题中显示下划线而不是下标

Gnuplot设置数据标签的背景颜色

gnuplot - 如何在 gnuplot 中绘制函数上的点

awk sed 根据上一行替换行上的空格

linux - awk 读取一行的条件,打印另一行的输出

unix - 如何在unix命令行中用word分割文件?

regex - 如何 grep/sed/awk 获取以空白字符开头的一系列输出

gnuplot - 强制图形图例/键为特定大小