【发布时间】:2021-01-27 16:25:07
【问题描述】:
我有一个问题,我想知道是否有人可以提供帮助。我有两个 .dat 文件,每个文件由三个用空格分隔的列组成。我有一个文件涵盖了我的整个数据范围(我们称之为正常状态)和第二个文件,其中包含处于不同状态的特定区域(我们称之为 diffstate),在该区域之外,数据将是相同的作为正常状态。我的数据需要很长时间才能运行,因此我不想在整个范围内再次运行相同的数据,我想尽可能将 diffstate 数据拼接到 normalstate 数据中。
这两个文件都按第一列排序,在现实生活中,第一列的范围从 -5 到 +3 左右,大约 150 个值。为了简单起见,这里我只是放了一些测试值。
即 文件1(正常状态):
1 a1 err-a1
2 a2 err-a2
4 a4 err-a4
5 a5 err-a5
6 a5 err-a6
file2(差异状态):
2 b2 err-b2
3 b3 err-b3
5 b5 err-b5
我想要的输出是它创建一个新文件,其中差异状态数据被楔入相关的正常状态数据的中间,或者等效地,正常状态数据被附加到文件开头和结尾的差异状态数据上。
所以想要的输出是这样的:
1 a1 err-a1
2 b2 err-b2
3 b3 err-b3
5 b5 err-b5
6 a6 err-a6
注意 1:列 1 的值 =2 和 =5 在两个文件中都存在,我想保留 diffstate 数据而不是 normalstate 数据。
注意 2:正常状态数据可能包含存在差异状态数据但差异状态数据没有的区域中的值,例如第 1 列值 = 4。我不想保留这些值,因为它们会破坏我的分析,我只想保留该区域中的 diffstate 值。
注意 3:我希望文件仍按第一列排序。
我确信有一种相对简单的方法可以做到这一点,可能使用 awk 或 join 命令之类的。我的计划是将它放入一个 shell 脚本中,我可以复制并重用于不同的数据集,我有一个类似的脚本,使用 awk 和 join 来检查两个文件是否具有相同的数据,并且只保留两组共享的数据,但我不确定如何推断这个例子,因为我只是在学习它们是如何工作的。到目前为止,我一直在手动进行复制和粘贴,但我想要一种更有效、更容易跟踪的方法。如果有更直观的方式在 Python 中执行此操作,或者其他方式也可以。对不起,我真的很陌生!任何帮助都将不胜感激,如果您能解释您的解决方案,那将非常有帮助。非常感谢!
【问题讨论】:
-
为什么
4 a4 err-a4丢失了,而1 a1 err-a1和6 a6 err-a6没有丢失? -
嗨@JamesBrown - 在我的分析中,在差异状态区域之外,数据将等同于正常状态数据,因此我可以保留这两个数据,但在该区域内它不一样,因此为什么我想丢弃 4. 我的目标是将正常状态的数据保留在我拥有 diffstate 数据的区域之外。第 1 列 value=4 的数据丢失,因为它是 diffstate 区域中间的正常状态数据(这里是 2 到 5)。另外两个被保留,因为它们在 diffstate 区域之外,即低于 2 和高于 5。我希望这有意义吗?