-a | n | Задает включение в выходной поток строк из файла n (n -l или 2), для которых не было найдено ни одного совпадения по указанному полю. |
-o | формат | Задает формат выводимой строки. Параметр формат представляет собой разделенный запятыми или пробелами список спецификаций, каждая из которых, в свою очередь, имеет формат номер_файла. поле. По умолчанию формат выводимой строки таков: |
1 — поле, по которому производится объединение; | ||
2 -oставшаяся часть первой строки; | ||
3 -oставшаяся часть второй строки. | ||
-1 | поле | Объединять строки по указанному полю первого файла (по умолчанию таковым является первое поле) |
-2 | поле | Объединять строки по указанному полю второго файла (по умолчанию таковым является первое поле) |
-t | символ | Задает разделитель полей во входном и выходном потоках |
Предположим, имеется два текстовых файла: один называется names.txt и содержит имена пользователей с указанием улиц, на которых они проживают, а другой называется town.txt и содержит имена пользователей с указанием городов, в которых они живут.
$ cat names.txt
M. Golls 12 Hidd Rd
P. Heller The Acre
P. Willey 132 The Grove
T. Norms 84 Connaught Rd
K. Fletch 12 Woodlea
$ cat town.txt
M. Golls Norwich NRD
P. Willey Galashiels GDD
T. Norms Brandon BSL
K. Fletch Mildenhall MAF
Задача состоит в таком соединении двух файлов, чтобы итоговый файл содержал имена пользователей и их полные адреса. Очевидно, что общим полем является первое. Команда join по умолчанию выполняет объединение файлов именно по первому полю.
$ join names.txt town.txt
M. Golls 12 Hidd Rd Norwich NRD
P. Willey 132 The Grove Galashiels GDD
T. Norms 6-3 Connaught Rd Brandon BSL
K. Fletch 12 Woodlea Mildenhall MAF
Как видите, пользователь P. Heller, для которого нет строки во втором файле, в результаты работы команды join не попал.
Если требуется все‑таки включить информацию о пользователе P. Heller в выходные данные, воспользуйтесь опцией -a. Поскольку исходная строка находится в первом файле, параметром данной опции будет цифра 1:
$ join -a1 names.txt town.txt
M. Golls 12 Hidd Rd Norwich NRD
P. Heller The Acre
P. Willey 132 The Grove Galashiels GDD
T. Norms 84 Connaught Rd Brandon BSL
K. Fletch 12 Woodlea Mildenhall MAF
В общем случае, чтобы включать в результаты несовпадающие строки из обоих файлов, применяйте команду join -a1 -a2.
Опция -o позволяет указать, какие поля и в какой последовательности следует включать в формируемую строку. Допустим, нужно создать файл, который включает только имена пользователей и названия городов, в которых они проживают. Требуемая информация содержится в первом поле первого файла и втором поле второго файла. Соответствующая команда имеет следующий вид:
$ join -о 1.1,2.2 names.txt town.txt
M. Golls Norwich
P. Willey Galashiels
T. Norms Brandon
K. Fletch Mildenhall
He всегда первое поле является общим для обоих файлов. Рассмотрим пример. Имеются два файла:
$ cat pers
P. Jones Office Runner ID897
S. Round UNIX admin ID667
L. Clip Personl Chief ID982
$ cat pers2
Dept2C ID897 6 years
Dept3S ID667 2 years
Dept5Z ID982 1 year