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}'
Добавить комментарий