join (Unix)

Поделись знанием:
Перейти к: навигация, поиск

join — команда UNIX-подобных операционных систем, объединяющая строки двух упорядоченных текстовых файлов на основе наличия общего поля. По своему функционалу схоже с оператором Join, используемого в языке SQL, но оперирует с текстовыми файлами. Данная утилита написана Майком Хертелем (англ. Mike Haertel).





Обзор

Команда join принимает на входе два текстовых файла и некоторое число аргументов. Если не передаются никакие аргументы командной строки, то данная команда ищет пары строк в двух файлах, обладающие совпадающим первым полем (последовательностью символов, отличных от пробела), и выводит строку, состоящую из первого поля и содержимого обоих строк.

Аргументы программы определяют, какой символ будет использован вместо пробела для разделения полей строки, которые будут проверяться при поиске совпадающих строк, а также выводить ли несовпавшие строки или нет. Выводить данные можно в третий файл при помощи перенаправления.

Синтаксис

Упрощенно синтаксис можно представить следующим образом:

join [параметры] файл1 файл2

Если в качестве одного из файлов указано «-» (но не обоих сразу!), то в этом случае вместо файла считывается стандартный ввод[1]. Файлы должны быть отсортированы в возрастающем лексикографическом порядке согласно кодировке ASCII, по полям соединения (обычно по первому полю в каждой строке). Результат операции составляют строки, по одной для каждой пары строк из отношений файл1 и файл2, которые имеют одинаковые поля соединения. Как правило, строка результата состоит из общего поля, затем остатка строки отношения файл1, затем остатка строки отношения файл2. По умолчанию разделителем при выводе информации является пробел. В случае стандартных разделителей полей последовательность упорядочения не учитывает начальные пробелы. Если задана опция -t, то все символы являются значимыми. Если имя файла состоит из цифр, оно может провзаимодействовать с опцией -o, стоящей непосредственно перед аргументами-файлами[2].

Пример

В качестве примера можно взять два нижеследующих файла.

Файл 1:

строка1 текст1
строка2 текст2

Файл 2:

строка1 текст11
строка3 текст3

Команда join (без переданных дополнительных параметров) выдаст следующий результат:

строка1 текст1 текст11

Это вызвано тем, что только слово «строка1» встретилось в обоих файлах в качестве первого слова строки.

Лицензия и распространение

Данная программа находится в собственности Фонда свободного программного обеспечения и распространяется без каких-либо гарантий как свободное ПО по лицензии GNU General Public License[1].

Напишите отзыв о статье "Join (Unix)"

Примечания

  1. 1 2 [linux.die.net/man/1/join join(1) — Linux man page]  (англ.)
  2. [mark.zlatoust.ru/comp/unix/man_unix.html?help&join Руководство по Unix]  (рус.)

См. также

Литература

  • Shelley Powers. Unix Power Tools. — "O'Reilly Media, Inc.", 2003. — P. 417. — ISBN 978-0-596-00330-2.

Ссылки

  • [linux.die.net/man/1/join join(1)] — страница справки man по пользовательским командам GNU/Linux  (англ.) (см.: GNU Coreutils)
  • [developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/join.1.html join(1)] — страница справки man по пользовательским командам Darwin и Mac OS X  (англ.)
  • [www.freebsd.org/cgi/man.cgi?query=join&sektion=1 join(1)] — страница справки man по пользовательским командам FreeBSD  (англ.)
  • [www.albany.edu/~ig4895/join.htm join Examples of the unix join command]  (англ.)


Отрывок, характеризующий Join (Unix)

Пьеру стало неловко и даже тяжело в обществе своего друга. Он замолчал.
– А вот что, душа моя, – сказал князь Андрей, которому очевидно было тоже тяжело и стеснительно с гостем, – я здесь на биваках, и приехал только посмотреть. Я нынче еду опять к сестре. Я тебя познакомлю с ними. Да ты, кажется, знаком, – сказал он, очевидно занимая гостя, с которым он не чувствовал теперь ничего общего. – Мы поедем после обеда. А теперь хочешь посмотреть мою усадьбу? – Они вышли и проходили до обеда, разговаривая о политических новостях и общих знакомых, как люди мало близкие друг к другу. С некоторым оживлением и интересом князь Андрей говорил только об устраиваемой им новой усадьбе и постройке, но и тут в середине разговора, на подмостках, когда князь Андрей описывал Пьеру будущее расположение дома, он вдруг остановился. – Впрочем тут нет ничего интересного, пойдем обедать и поедем. – За обедом зашел разговор о женитьбе Пьера.
– Я очень удивился, когда услышал об этом, – сказал князь Андрей.
Пьер покраснел так же, как он краснел всегда при этом, и торопливо сказал:
– Я вам расскажу когда нибудь, как это всё случилось. Но вы знаете, что всё это кончено и навсегда.
– Навсегда? – сказал князь Андрей. – Навсегда ничего не бывает.
– Но вы знаете, как это всё кончилось? Слышали про дуэль?
– Да, ты прошел и через это.
– Одно, за что я благодарю Бога, это за то, что я не убил этого человека, – сказал Пьер.
– Отчего же? – сказал князь Андрей. – Убить злую собаку даже очень хорошо.
– Нет, убить человека не хорошо, несправедливо…
– Отчего же несправедливо? – повторил князь Андрей; то, что справедливо и несправедливо – не дано судить людям. Люди вечно заблуждались и будут заблуждаться, и ни в чем больше, как в том, что они считают справедливым и несправедливым.
– Несправедливо то, что есть зло для другого человека, – сказал Пьер, с удовольствием чувствуя, что в первый раз со времени его приезда князь Андрей оживлялся и начинал говорить и хотел высказать всё то, что сделало его таким, каким он был теперь.
– А кто тебе сказал, что такое зло для другого человека? – спросил он.
– Зло? Зло? – сказал Пьер, – мы все знаем, что такое зло для себя.
– Да мы знаем, но то зло, которое я знаю для себя, я не могу сделать другому человеку, – всё более и более оживляясь говорил князь Андрей, видимо желая высказать Пьеру свой новый взгляд на вещи. Он говорил по французски. Je ne connais l dans la vie que deux maux bien reels: c'est le remord et la maladie. II n'est de bien que l'absence de ces maux. [Я знаю в жизни только два настоящих несчастья: это угрызение совести и болезнь. И единственное благо есть отсутствие этих зол.] Жить для себя, избегая только этих двух зол: вот вся моя мудрость теперь.
– А любовь к ближнему, а самопожертвование? – заговорил Пьер. – Нет, я с вами не могу согласиться! Жить только так, чтобы не делать зла, чтоб не раскаиваться? этого мало. Я жил так, я жил для себя и погубил свою жизнь. И только теперь, когда я живу, по крайней мере, стараюсь (из скромности поправился Пьер) жить для других, только теперь я понял всё счастие жизни. Нет я не соглашусь с вами, да и вы не думаете того, что вы говорите.