根据一列连接两个文件

chr*_*ris 4 awk merge join

文件 1:

a, 1    
b, 5    
c, 2    
f, 7
Run Code Online (Sandbox Code Playgroud)

文件2:

a, 2    
f, 9    
g, 3
Run Code Online (Sandbox Code Playgroud)

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

文件 3:

a, 1, 2    
b, 5, -    
c, 2, -    
f, 7, 9    
g, -, 3
Run Code Online (Sandbox Code Playgroud)

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

Kus*_*nda 6

使用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
Run Code Online (Sandbox Code Playgroud)

标准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 )
Run Code Online (Sandbox Code Playgroud)