我生成了一个具有以下格式的数据文件:
0.1
Analytic value = 340.347685734
Approximated value = 332.45634555
--
0.2
Analytic value = 340.936745872
Approximated value = 332.57893789
--
0.3
... and so on
我想在matplotlib/gnuplot中针对输入参数(0.1,0.2等)绘制解析值和近似值。通常,在生成数据文件之前,我使用awk脚本生成它们,该脚本将三个值放在三列中,这非常容易绘制。但是,在这里我意外地生成了不同格式的数据文件。如何将此文本文件转换为以下格式(可能使用正则表达式或awk!):
0.1 340.347685734 332.45634555
0.2 340.936745872 332.57893789
0.3 ... and so on
或者有没有一种方法可以不转换格式而使用gnuplot/matplotlib绘制数据?
**编辑:**我已经尝试使用python3。以下是我的代码:
file = open("myFile.dat",'r')
newFile = open("newFile.dat", 'a')
for i in range(4000):
col1 = file.readline().split[-1]
col2 = file.readline().split[-1]
col3 = file.readline().split[-1]
_ = file.readline().split[-1]
line = col1 + " " + col2 + " " + col3
newFile.write(line)
然而,我得到了一些错误TypeError: 'builtin_function_or_method' object is not subscriptable
,我不明白,我认为这是一个非常低效的代码。这就是为什么我问了。到目前为止提出的所有解决方案都工作得很好。我用awk
标记解决方案作为可接受的答案,因为它简单而优雅。另外,我很欣赏只使用gnuplot的解决方案,这也为我揭示了gnuplot的一面。
5条答案
按热度按时间icomxhvb1#
我将利用GNU
AWK
来完成这项任务,如下所示,让file.txt
内容然后
剂量输出
说明:对于
--
行,只需打印换行符并转到下一行,对于所有其他行,输出最后一个字段,后面是空格,而不是换行符。如果您想了解更多关于NF
的信息,请阅读8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNRplicqrtu2#
这里不需要Regex。4个简单的替换:
两次替换不需要的文本,一次替换删除换行符,一次替换再次插入换行符。
结果:
b91juud33#
有很多方法可以解决这个问题,其中的选择将取决于文件大小。这里有一个简单的解决方案,用于无法一次加载整个文件-您必须逐行处理它,
请注意,此解决方案紧密依赖于您提供的文件的结构。
zfciruhq4#
或者有没有一种方法可以不转换格式而使用gnuplot/matplotlib绘制数据?
**是的,有!**这里是一个独立于平台的gnuplot解决方案。无需外部额外的数据准备工具。
如果从文件打印,请跳过
$Data <<EOD ... EOD
部分,使用plot 'yourFile.dat' ...
。脚本:(适用于gnuplot>=5.0.6,2017年3月)
结果:
2hh7jdfx5#
使用任何awk: