Полное руководство по команде join в Linux

linux

join — это мощная команда для объединения двух файлов по общему полю (аналог SQL JOIN). Она полезна при работе с табличными данными, логами и CSV-файлами.


Основной синтаксис

join [ОПЦИИ] ФАЙЛ1 ФАЙЛ2
  • ФАЙЛ1 и ФАЙЛ2 должны быть отсортированы по общему полю (иначе join не сработает).
  • По умолчанию объединение происходит по первому столбцу.

Ключевые опции

ОпцияОписаниеПример
-1 NУказать столбец из первого файлаjoin -1 2 file1.txt file2.txt
-2 NУказать столбец из второго файлаjoin -2 3 file1.txt file2.txt
-t CЗадать разделитель (по умолчанию — пробел)join -t ',' file1.csv file2.csv
-a ФВывести несовпадающие строки из файла (1 или 2)join -a 1 file1.txt file2.txt
-v ФВывести только несовпадающие строкиjoin -v 2 file1.txt file2.txt
-o СПИСОКВыбрать поля для вывода (формат: ФАЙЛ.ПОЛЕ)join -o 1.1,2.2 file1.txt file2.txt
-iИгнорировать регистрjoin -i file1.txt file2.txt

Примеры использования

▸ Пример 1: Простое объединение по первому столбцу

file1.txt

1 Alice  
2 Bob  
3 Charlie  

file2.txt

1 Engineer  
2 Designer  
3 Manager  

Команда:

join file1.txt file2.txt

Результат:

1 Alice Engineer  
2 Bob Designer  
3 Charlie Manager  

▸ Пример 2: Объединение по указанному столбцу

file1.txt (ID — 2-й столбец):

Alice 1 25  
Bob 2 30  
Charlie 3 28  

file2.txt (ID — 1-й столбец):

1 Engineer  
2 Designer  
3 Manager  

Команда:

join -1 2 -2 1 file1.txt file2.txt

Результат:

1 Alice 25 Engineer  
2 Bob 30 Designer  
3 Charlie 28 Manager  

▸ Пример 3: Использование разделителя (CSV)

file1.csv

1,Alice,25  
2,Bob,30  
3,Charlie,28  

file2.csv

1,Engineer  
2,Designer  
3,Manager  

Команда:

join -t ',' file1.csv file2.csv

Результат:

1,Alice,25,Engineer  
2,Bob,30,Designer  
3,Charlie,28,Manager  

▸ Пример 4: Вывод несовпадающих строк (-a, -v)

file1.txt

1 Alice  
2 Bob  
4 Dave  

file2.txt

1 Engineer  
2 Designer  
3 Manager  

Вывод строк, которых нет во втором файле (-v 1)

join -v 1 file1.txt file2.txt


Результат:

4 Dave

Вывод всех строк из первого файла, даже без совпадений (-a 1)

join -a 1 file1.txt file2.txt


Результат:

1 Alice Engineer  
2 Bob Designer  
4 Dave

▸ Пример 5: Выбор определенных полей (-o)

Команда:

join -o 1.1,1.2,2.2 file1.txt file2.txt


Результат:

1 Alice Engineer  
2 Bob Designer  
3 Charlie Manager  


(Вывел: ID, Имя, Должность)


Важные особенности

Требуется сортировка!

sort file1.txt > file1_sorted.txt  
sort file2.txt > file2_sorted.txt  
join file1_sorted.txt file2_sorted.txt

Разные разделители — используйте -t (например, для CSV — -t ',').

Аналог SQL JOIN

  • join = INNER JOIN
  • join -a 1 = LEFT JOIN
  • join -a 2 = RIGHT JOIN
  • join -a 1 -a 2 = FULL OUTER JOIN

Комбинации с другими командами

▸ Объединение после фильтрации (grep + join)

grep "Error" log1.txt | sort > errors1.txt  
grep "Error" log2.txt | sort > errors2.txt  
join errors1.txt errors2.txt

▸ Объединение и агрегация (awk)

join file1.txt file2.txt | awk '{print $1, $2, $3, $4}'

join — это мощный инструмент для:
Объединения данных из двух файлов (аналог SQL JOIN)
Анализа логов и CSV
Фильтрации и выборки нужных полей

🔗 Дополнительные материалы


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *