Как присоединиться к файлам на командной строке, не создавая временные файлы?

У меня есть два файла в 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

Но есть ли способ сделать это, не создавая временные файлы?

7
задан 19.08.2009, 07:12

2 ответа

Следующее будет работать в оболочке удара:

# 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.

18
ответ дан 07.12.2019, 14:29

Zsh отвечают:

join =(sort abc) =(sort bcd)
3
ответ дан 07.12.2019, 14:29

Теги

Похожие вопросы