如何根据第二列的匹配合并多个文件?

问题描述 投票:0回答:1

我正在为一个问题而苦苦挣扎,如何根据第二列的匹配来合并多个文件?但是保留第一列。例如,file1,file2,file3,第二列是第一列的子类别,例如,A具有三个值19 20 23。

file1

A 19 0.5
B 21 0.3
A 20 0.4
C 18 0.0
D 30 0.9
A 23 0.2

file2

B 21 0.2
A 19 0.4
C 18 0.6
D 30 0.5
A 23 0.4
F 50 0.3

file3

B 21 0.5
A 19 0.0
C 18 0.3
H 46 0.0
D 30 0.3
A 23 0.6

我想要的,摆脱它们之间不常见的行:combined.file

A 19 0.5 0.4 0.0
B 21 0.3 0.2 0.5
D 30 0.9 0.5 0.3
A 23 0.2 0.4 0.6
C 18 0.0 0.6 0.3

任何人都可以帮忙吗?

非常感谢。

linux unix join awk merge
1个回答
0
投票

您尚未对此操作指定任何限制。对我来说,最简单,最可靠的方法是用C#编写程序。这是算法:

  • 为Linux安装.NET Core https://dotnet.microsoft.com/download
  • 创建新的控制台应用程序dotnet new console
  • 您可以使用文本编辑器编辑程序源代码
  • 在您的程序中,创建一个Dictionary<string, List<string>>
  • 在程序中,遍历目录中的所有文件。
  • 对于每个文件:打开文件并遍历文件中的每一行。
  • 对于文件中的每一行:使用诸如“ A 19”之类的键向字典中添加一个条目。该值将是一个字符串列表,其每个值均与“ 0.5”类似。如果键已经添加到字典中,则通过添加新值(例如“ 0.4”)来更新其列表]
  • 完成此过程后,所需的结果是字典中的条目,其中列表中的项目数等于您处理的文件数(对文件计数)。

使用以上给出的数据,该词典将包含以下内容。我加了专栏KEEP吗?当列表中非空项目的数量等于文件计数(3)时为Y。

+------+------+------+------+-------+
| KEY  |  L1  |  L2  |  L3  | KEEP? |
+------+------+------+------+-------+
| A 19 |  0.5 |  0.4 |  0.0 | Y     |
| B 21 |  0.3 |  0.2 |  0.5 | Y     |
| A 20 |  0.4 | null | null | N     |
| C 18 |  0.0 |  0.6 |  0.3 | Y     |
| D 30 |  0.9 |  0.5 |  0.3 | Y     |
| A 23 |  0.2 |  0.4 |  0.6 | Y     |
| F 50 |  0.3 | null | null | N     |
| H 46 |  0.0 | null | null | N     |
+------+------+------+------+-------+
© www.soinside.com 2019 - 2024. All rights reserved.