文件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 )