Linux и UNIX: программирование в shell. Руководство разработчика
вернуться

Тейнсли Дэвид

Шрифт:

$ cat parts.txt

AK123 OP

OК122 OP

OК999 OP

Если к этому файлу применить команду uniq, будут отображены все строки, поскольку все они разные.

$ uniq parts.txt

AК123 OP

OK122 OP

OK999 OP

Если же выполнить проверку только по второму полю, получим иной результат. Команда uniq сравнит повторяющиеся поля "ОР" и отобразит только одну строку:

$ uniq -f1 parts.txt

OK123 OP

11.3. Объединение файлов с помощью команды join

Команда join выполняет соединение строк из двух текстовых файлов на основании совпадения указанных полей. Ее действие напоминает операцию join языка SQL. Механизм работы команды таков:

1. Каждый из двух входных файлов разбивается на поля (по умолчанию разделителем полей является пробел).

2. Из первого файла извлекается первая строка, а из нее — первое поле (можно указать другое поле).

3. Во втором файле ищется строка, имеющая такое же первое поле.

4. Найденная строка, из которой удаляется первое поле, присоединяется к исходной строке, и результат записывается в выходной поток.

5. Пункты 3 и 4 повторяются до тех пор, пока во втором файле есть строки с совпадающим первым полем.

6. Пункты 2—6 повторяются для каждой строки первого файла.

Таким образом, в выходной поток попадают только строки, имеющие общие компоненты.

Общий формат команды join таков:

join [опции] входной_файл1 входной_файл2

Рассмотрим некоторые наиболее важные опции этой команды:

– a

n

Задает включение в выходной поток строк из файла n (n -l или 2), для которых не было найдено ни одного совпадения по указанному полю.

– o

формат

Задает формат выводимой строки. Параметр формат представляет собой разделенный запятыми или пробелами список спецификаций, каждая из которых, в свою очередь, имеет формат номер_файла. поле. По умолчанию формат выводимой строки таков:

1 — поле, по которому производится объединение;

2 -oставшаяся часть первой строки;

3 -oставшаяся часть второй строки.

– 1

поле

Объединять строки по указанному полю первого файла (по умолчанию таковым является первое поле)

– 2

поле

Объединять строки по указанному полю второго файла (по умолчанию таковым является первое поле)

– t

символ

Задает разделитель полей во входном и выходном потоках

11.3.1. Объединение двух файлов

Предположим, имеется два текстовых файла: один называется 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 не попал.

11.3.2. Включение несовпадающих строк

Если требуется все-таки включить информацию о пользователе P. Heller в выходные данные, воспользуйтесь опцией -a. Поскольку исходная строка находится в первом файле, параметром данной опции будет цифра 1:

  • Читать дальше
  • 1
  • ...
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • help@private-bookers.win