基于列连接两个文件

基于列连接两个文件

文件1:

a, 1    
b, 5    
c, 2    
f, 7

文件2:

a, 2    
f, 9    
g, 3

我想根据第 1 列加入文件 1 和文件 2 并获取文件 3,如下所示。

文件3:

a, 1, 2    
b, 5, -    
c, 2, -    
f, 7, 9    
g, -, 3

合并匹配值并保留每个文件中的特定值

答案1

使用join

$ join -t, -a 1 -a 2 -o0,1.2,2.2 -e ' -' file1 file2
a, 1, 2
b, 5, -
c, 2, -
f, 7, 9
g, -, 3

标准join实用程序将对两者执行关系 JOIN 操作已排序输入文件。

这里使用的标志告诉实用程序接受逗号分隔的输入 ( -t,) 并为两个文件中的所有条目生成输出(-a 1 -a 2,否则它只会为具有匹配第一个字段的行生成输出)。然后,我们要求输出连接字段以及两个文件的第二列 ( -o0,1.2,2.2),并表示任何缺失的字段都应由字符串替换␣-(空格-破折号,带有-e ' -')。

如果输入未排序,则必须对其进行预排序。在理解进程替换的 shell 中<( ... ),这可以通过

join -t, -a 1 -a 2 -o0,1.2,2.2 -e ' -' <( sort file1 ) <( sort file2 )

相关内容