【发布时间】:2012-03-17 13:48:20
【问题描述】:
我有很多固定宽度数据的文本文件,例如:
$ head model-q-060.txt
% x y
15.0 0.0
15.026087 -1.0
15.052174 -2.0
15.07826 -3.0
15.104348 -4.0
15.130435 -5.0
15.156522 -6.0
15.182609 -6.9999995
15.208695 -8.0
数据包含 3 或 4 次模拟运行,全部存储在一个文本文件中,运行之间没有分隔符。换句话说,没有空行或任何东西,例如如果每次运行只有 3 条“记录”,则运行 3 次时看起来像这样:
$ head model-q-060.txt
% x y
15.0 0.0
15.026087 -1.0
15.052174 -2.0
15.0 0.0
15.038486 -1.0
15.066712 -2.0
15.0 0.0
15.041089 -1.0
15.087612 -2.0
这是一个 COMSOL Multiphysics 输出文件,供感兴趣的人使用。从视觉上您可以分辨出新的运行数据从哪里开始,因为第一个 x 值是重复的(实际上整个第二行可能对所有这些数据都相同)。所以我需要首先打开文件并获取这个 x 值,保存它,然后将它用作与 awk 或 csplit 匹配的模式。我正在努力解决这个问题!
csplit 将完成这项工作:
$ csplit -z -f 'temp' -b '%02d.txt' model-q-060.txt /^15\.0\\s/ {*}
但我必须知道要拆分的模式。这个问题很相似,但我的每个文本文件可能有不同的匹配模式:Split files based on file content and pattern matching。
本。
【问题讨论】:
-
您会反对基于 python 或 perl 的解决方案吗?我希望它只有几行。
-
接下来我正在处理python-matplotlib中的数据,所以python也会很棒!
-
新运行的开始是自变量可以倒退的唯一时间吗?这似乎是一种比寻找重复线更可靠的检测方法。
-
Ben Voigt - 是的,很好的观察力。你是什么意思然后使用它?