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

Shell-скрипт, чтобы передать аргументы в другой скрипт
Как копировать файлы с помощью ditto с обратными косыми чертами в именах файлов
Однострочная команда для перемещения с сохранением той же структуры папок
Как объединить строки в сценарий bash?
утилита командной строки для записи с микрофона
Копирование нескольких файлов в Linux
Выполнить команду из результата grep
Скрипт Bash, который автоматически меняет раскладки клавиатуры и мыши на основе активного окна
Samba net команда для завершения работы Windows 8 машина [дубликат]
Как распечатать команду bash history и добавить ее в файл?
Почему inotifywait-m работает несколько раз? (бесконечный цикл)
Цикл по диапазону чисел для загрузки с помощью wget
Mac терминала показывая Баш вместо моего логина
Запуск скриптов bash из скрипта bash в другой папке
Как добавить пункты меню в меню Gnome "приложения" из командной строки?

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

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

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

5
задан dggoldst
источник

3 ответов

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

# 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 для соединения означает соединение по вторым столбцам. В качестве альтернативы вступить -1 х -2 г файл1 файл2 вступит в столбце х file1 и колонны yth от файл2.

18
отвечен dggoldst 2009-08-19 04:16:24
источник

Zsh ответ:

join =(sort abc) =(sort bcd)
3
отвечен Aaron F. 2009-08-19 05:27:28
источник

это будет работать в оболочке bash:

# Join two files
$ sort abc | join - <(sort bcd)
1 b d
2 a b

или

# Join two files
$ sort bcd | join <(sort abc) -
1 b d
2 a b

потому что join может считывать стандартный ввод с помощью' -'.

1
отвечен jianpx 2011-12-30 16:34:16
источник

Другие вопросы bash command-line linux shell