一尘不染

Bash连接命令

linux

Infile1:

1 a
3 c
4 d
6 f

Infile2:

1 a 
2 b
5 e
6 f
7 g
8 h

我如何使用unix join命令加入这些文件以获取以下输出:

1 aa
2 b
3 c
4 d
5 e
6 ff
7 g 
8 h

Dogbanes答案有效,但是…当我在此文件上应用Dogbanes答案时:

27  27
28  22
29  37
30  15
31  21
32  13
33  18
34  24

和这个:

27  7
28  13
29  6
30  12
31  30
32  5
33  10
34  28

他们不加入:

27  27
27  7
28  13
28  22
29  37
29  6
30  12
30  15
31  21
31  30
32  13
32  5
33  10
33  18
34  24
34  28

第二种情况是制表符分隔的,所以我用 -t \t


阅读 346

收藏
2020-06-07

共1个答案

一尘不染

首先sort两个文件。然后使用join联接两个文件的第一个字段。sed如果要删除空间并转换a a为,则还需要通过管道传递输出aa。如下所示:

$ join -t " " -1 1 -2 1 -a 1 -a 2  <(sort file1) <(sort file2) | sed 's/ \([a-z]\) / \1/g'
1 aa
2 b
3 c
4 d
5 e
6 ff
7 g
8 h
2020-06-07