我有多个 .txt 文件,并希望根据它们的第一列(数字)将它们合并在一起,如果有任何丢失的数据,请填写“NULL”。
文件_1:
1 a
2 b
3 c
文件_2:
3 c
4 d
5 e
文件_3:
4 d
5 e
6 f
预期输出:
1 a NULL NULL
2 b NULL NULL
3 c c NULL
4 NULL d d
5 NULL e e
6 NULL NULL f
join -t $'\t' -a 1 -a 2 -1 1 -2 1 -e NULL -o 0,1.2,2.2 file_1 file_2 | join -t $'\t' -a 1 -a 2 -1 1 -2 1 -e NULL - file_3 > expected_output
该命令为我提供了第 1、2 和 3 列的正确输出;但是,第 4 列中缺少“NULL”,知道如何解决吗?还有没有更好的方法来合并多个文件而不是编写超长管道命令?
扩展从https://stackoverflow.com/a/13963634和fra-san学到的东西
这适用于任意数量的文件。
结果:
你快到了。使用您的命令,我们得到:
行只是没有相同数量的列,因为我们没有为
join
管道中的右手设置格式。如果我们将其添加为
-o 0,1.2,1.3,2.2
(连接字段 + 第一个连接的第二和第三列 + 的第二列file_3
):最后,如果我们可以假设 的 GNU 实现
join
,我们可以让它完成推断正确格式的工作,并使用-o auto
而不是-o 0,1.2,2.2
and-o 0,1.2,1.3,2.2
,前提是对于每个文件,所有行最多具有与第一个相同数量的字段. 报价info join
: