文件 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)
合并匹配值并保留每个文件中的特定值
使用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)