Команда join · 4 min read · Sep 17, 2025

Учебник по команде join в Linux для начинающих (5 примеров)

Иногда вам может понадобиться объединить два файла таким образом, чтобы вывод имел еще больший смысл. Например, может быть файл, содержащий названия континентов, и другой файл, содержащий названия стран, расположенных на этих континентах, и требуется объединить оба файла так, чтобы континент и соответствующая страна появлялись в одной строке.

Это всего лишь один пример - таких случаев может быть сотни. Если вы на Linux и ищете инструмент, который может помочь вам в таких ситуациях, вам стоит обратить внимание на join, который является утилитой командной строки. В этом учебнике мы обсудим эту команду, используя несколько простых для понимания примеров.

Пожалуйста, обратите внимание, что все примеры, упомянутые в этой статье, были протестированы на Ubuntu 16.04, и версия команды join, которую мы использовали, - 8.25.

Команда join в Linux

Команда join позволяет вам объединять строки двух файлов по общему полю.

join [OPTION]... FILE1 FILE2

Вот что говорит страница man об этом инструменте:

Для каждой пары входных строк с идентичными полями соединения записать строку в стандартный вывод. Поле соединения по умолчанию - первое, разделенное пробелами. Когда FILE1 или FILE2 (не оба) - , читать стандартный ввод.

Следующие примеры должны дать вам хорошее представление о том, как работает команда join.

1. Как объединить строки файлов с помощью команды join?

Давайте разберем базовое использование команды join. Предположим, есть два файла (file1 и file2), которые содержат следующие строки:

1. Азия:  
2. Африка:  
3. Европа:  
4. Северная Америка:

и

1. Индия  
2. Нигерия  
3. Нидерланды  
4. США

Теперь вы можете объединить эти два файла следующим образом:

join file1 file2

Вот вывод вышеуказанной команды в нашем случае:

2. Как заставить join выводить непарные строки?

По умолчанию команда join выводит только парные строки. Например, даже если file1 содержит дополнительное поле (строка номер 5):

1. Азия:  
2. Африка:  
3. Европа:  
4. Северная Америка:  
5. Южная Америка:

объединение file1 и file2 не даст никакого другого вывода:

Это потому, что непарные строки не включаются в вывод. Однако, если вы хотите, вы все равно можете их получить в выводе, используя командный параметр -a. Этот параметр требует, чтобы вы указали номер файла, чтобы инструмент знал, о каком файле идет речь.

Например, в нашем случае команда будет:

join file1 file2 -a 1

Таким образом, вы можете видеть, что непарная строка из файла номер 1 (file1 в нашем случае) также была отображена в выводе.

Обратите внимание, что если вы просто хотите вывести непарные строки (то есть подавить парные строки в выводе), вы можете сделать это, используя командный параметр -v. Этот параметр работает точно так же, как -a.

Вот пример параметра -v:

3. Как указать пользовательские поля для соединения?

Как мы уже знаем, join объединяет строки файлов по общему полю, которое по умолчанию является первым. Однако, если вы хотите, вы можете указать другое поле для каждого файла. Например, рассмотрим следующие содержимое в file1 и file2 соответственно.

* 1. Азия:  
& 2. Африка:  
@ 3. Европа:  
# 4. Северная Америка:
# 1. Индия  
@ 2. Нигерия  
& 3. Нидерланды  
* 4. США

Теперь, если вы хотите, чтобы второе поле каждой строки было общим полем для join, вы можете сообщить об этом инструменту, используя командные параметры -1 и -2. Первый из них представляет первый файл, а второй относится ко второму файлу. Эти параметры требуют числового аргумента, который указывает на поле соединения для соответствующего файла.

Например, в нашем случае команда будет:

join -1 2 -2 2 file1 file2

И вот вывод этой команды:

Обратите внимание, что если позиция общего поля одинакова в обоих файлах (как в примере, который мы только что обсудили, где это 2), вы можете заменить часть -1 [field] -2 [field] в команде на -j [field]. Таким образом, в нашем случае команда станет:

join -j2 file1 file2

4. Как сделать операцию join нечувствительной к регистру?

По умолчанию операция команды join чувствительна к регистру. Например, рассмотрим следующие файлы:

file1

A. Азия:  
B. Африка:  
C. Европа:  
D. Северная Америка:

file2

a. Индия  
b. Нигерия  
c. Нидерланды  
d. США

Теперь, если вы попытаетесь объединить эти два файла, используя общее (первое) поле, ничего не произойдет. Это потому, что регистр элементов поля в обоих файлах различен. Чтобы сделать так, чтобы join игнорировал эту проблему с регистром, используйте командный параметр -i.

Вот команда для нашего случая:

join -i file1 file2

И следующий скриншот показывает команду в действии:

5. Как сделать так, чтобы join не проверял отсортированный ввод?

По умолчанию команда join проверяет, отсортирован ли предоставленный ввод, и сообщает об этом, если нет. Например, рассмотрим следующий вывод, когда информация в file1 не была отсортирована:

Теперь, если вы хотите, чтобы эта ошибка/предупреждение исчезло, вы можете сделать это, используя параметр –nocheck-order. Вот та же команда, но с включенным этим параметром:

Таким образом, вы можете видеть, что команда join в этот раз не проверяла отсортированный ввод.

Заключение

Join может не быть очень простым инструментом для понимания, но как только вы к нему привыкнете, он может стать огромным экономителем времени в некоторых ситуациях. Мы рассмотрели большинство параметров командной строки здесь. Попробуйте их, а затем ознакомьтесь со страницей man команды для остальных.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.