Linux – Bash join command

bashjoinlinuxunix

Infile1:

1 a
3 c
4 d
6 f

Infile2:

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

How do I join these files with the unix join command to get this output:

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

Dogbanes answer worked but…
when I apply dogbanes answer on this file:

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

and this:

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

They don't join:

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

The second scenario is tab delimited so I used -t \t

Best Solution

Works for me (almost). You should specify -t $'\t' for the tab character, not just -t \t. Bash does not interpret \t unless in $'' quotes.

join -t $'\t' -o 1.2,2.2 <(echo  $'27\t27
28\t22
29\t37
30\t15
31\t21
32\t13
33\t18
34\t24' | sort) <(echo $'27\t7
28\t13
29\t6
30\t12
31\t30
32\t5
33\t10
34\t28' | sort)
27      7
22      13
37      6
15      12
21      30
13      5
18      10
24      28