Продвинутые опции команды join
В реальных задачах обработки данных вам часто приходится использовать более продвинутые операции объединения, такие как обработка несопоставленных данных или выбор определенных полей. На этом этапе вы познакомитесь с этими продвинутыми опциями команды join
.
Создадим два более сложных файла для наших примеров:
echo -e "1:2023-04-01:Thunderstorm\n2:2023-04-15:Hurricane\n3:2023-05-02:Tornado\n4:2023-05-10:Blizzard" > ~/project/storms_types.txt
echo -e "1:High\n2:Medium\n5:Low" > ~/project/severity.txt
Проверим содержимое этих файлов:
cat ~/project/storms_types.txt
Вы должны увидеть:
1:2023-04-01:Thunderstorm
2:2023-04-15:Hurricane
3:2023-05-02:Tornado
4:2023-05-10:Blizzard
cat ~/project/severity.txt
Вы должны увидеть:
1:High
2:Medium
5:Low
Обратите внимание, что в этих файлах идентификаторы не совпадают полностью:
- В файле
severity.txt
есть запись для идентификатора шторма 5, который отсутствует в файле storms_types.txt
- В файле
storms_types.txt
есть записи для идентификаторов штормов 3 и 4, которые отсутствуют в файле severity.txt
По умолчанию команда join
выводит только те строки, в которых поле объединения совпадает в обоих файлах:
join -t: ~/project/storms_types.txt ~/project/severity.txt
Вы должны увидеть:
1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium
В выводе появляются только идентификаторы штормов 1 и 2, так как они есть в обоих файлах.
Обработка несопоставленных строк
Чтобы включить несопоставленные строки в вывод, вы можете использовать опцию -a
:
join -t: -a 1 -a 2 ~/project/storms_types.txt ~/project/severity.txt
Опция -a 1
сообщает команде join
включить несопоставленные строки из первого файла, а опция -a 2
делает то же самое для второго файла.
Вы должны увидеть:
1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium
3:2023-05-02:Tornado:
4:2023-05-10:Blizzard:
5::Low
Обратите внимание, что в несопоставленных строках поля, где должны быть данные из другого файла, пустые.
Выбор определенных полей
Вы также можете выбрать определенные поля из каждого файла для включения в вывод, используя опцию -o
:
join -t: -o 1.1,1.3,2.2 ~/project/storms_types.txt ~/project/severity.txt
Опция -o 1.1,1.3,2.2
указывает, какие поля нужно вывести:
1.1
: Первое поле из первого файла (идентификатор шторма)
1.3
: Третье поле из первого файла (тип шторма)
2.2
: Второе поле из второго файла (уровень тяжести)
Вы должны увидеть:
1:Thunderstorm:High
2:Hurricane:Medium
В этом выводе есть только идентификатор шторма, тип шторма и уровень тяжести, а информация о дате опущена. Это особенно полезно при работе с файлами, которые содержат много полей, но вам нужны только определенные из них в выводе.