У меня есть два файла в Linux / среда Bash:
# Example data
$ cat abc
2 a
1 b
3 c
$ cat bcd
5 c
2 b
1 d
Я пытаюсь присоединиться к этим двум файлам на первом столбце. Следующее не работает, потому что входные файлы должны быть отсортированы на поле соответствия.
# Wrong: join on unsorted input does not work
$ join abc bcd
Я могу обойти это путем создания двух временных файлов и присоединения к ним
$ sort abc > temp1
$ sort bcd > temp2
$ join temp1 temp2
1 b d
2 a b
Но есть ли способ сделать это, не создавая временные файлы?
Следующее будет работать в оболочке удара:
# Join two files
$ join <(sort abc) <(sort bcd)
1 b d
2 a b
Можно присоединиться на любом столбце, пока Вы сортируете входные файлы на том столбце
# Join on the second field
$ join -j2 <(sort -k2 abc) <(sort -k2 bcd)
b 1 2
c 3 5
-k2 аргумент виду означает вид на втором столбце.-j2 аргумент для присоединения к соединению средств на вторых столбцах. Кроме того, присоединитесь file1 file2, на-1 x-2 года присоединится на xth столбце file1 и yth столбце file2.