1.\" $OpenBSD: join.1,v 1.22 2010/09/03 11:09:29 jmc Exp $ 2.\" 3.\" Copyright (c) 1990, 1993 4.\" The Regents of the University of California. All rights reserved. 5.\" 6.\" This code is derived from software contributed to Berkeley by 7.\" the Institute of Electrical and Electronics Engineers, Inc. 8.\" 9.\" Redistribution and use in source and binary forms, with or without 10.\" modification, are permitted provided that the following conditions 11.\" are met: 12.\" 1. Redistributions of source code must retain the above copyright 13.\" notice, this list of conditions and the following disclaimer. 14.\" 2. Redistributions in binary form must reproduce the above copyright 15.\" notice, this list of conditions and the following disclaimer in the 16.\" documentation and/or other materials provided with the distribution. 17.\" 3. Neither the name of the University nor the names of its contributors 18.\" may be used to endorse or promote products derived from this software 19.\" without specific prior written permission. 20.\" 21.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31.\" SUCH DAMAGE. 32.\" 33.\" @(#)join.1 8.3 (Berkeley) 4/28/95 34.\" 35.Dd $Mdocdate: September 3 2010 $ 36.Dt JOIN 1 37.Os 38.Sh NAME 39.Nm join 40.Nd relational database operator 41.Sh SYNOPSIS 42.Nm join 43.Op Fl 1 Ar field 44.Op Fl 2 Ar field 45.Oo 46.Fl a Ar file_number | Fl v Ar file_number 47.Oc 48.Op Fl e Ar string 49.Op Fl o Ar list 50.Op Fl t Ar char 51.Ar file1 52.Ar file2 53.Sh DESCRIPTION 54The 55.Nm 56utility performs an 57.Dq equality join 58on the specified files 59and writes the result to the standard output. 60The 61.Dq join field 62is the field in each file by which the files are compared. 63The first field in each line is used by default. 64There is one line in the output for each pair of lines in 65.Ar file1 66and 67.Ar file2 68which have identical join fields. 69Each output line consists of the join field, the remaining fields from 70.Ar file1 71and then the remaining fields from 72.Ar file2 . 73.Pp 74The default field separators are tab and space characters. 75In this case, multiple tabs and spaces count as a single field separator, 76and leading tabs and spaces are ignored. 77The default output field separator is a single space character. 78.Pp 79Many of the options use file and field numbers. 80Both file numbers and field numbers are 1 based, i.e., the first file on 81the command line is file number 1 and the first field is field number 1. 82.Pp 83When the default field delimiter characters are used, the files to be joined 84should be ordered in the collating sequence of 85.Xr sort 1 , 86using the 87.Fl b 88option, on the fields on which they are to be joined, otherwise 89.Nm 90may not report all field matches. 91When the field delimiter characters are specified by the 92.Fl t 93option, the collating sequence should be the same as 94.Xr sort 1 95without the 96.Fl b 97option. 98.Pp 99If one of the arguments 100.Ar file1 101or 102.Ar file2 103is 104.Sq - , 105the standard input is used. 106.Pp 107The options are as follows: 108.Bl -tag -width Ds 109.It Fl 1 Ar field 110Join on the 111.Ar field Ns 'th 112field of 113.Ar file1 . 114.It Fl 2 Ar field 115Join on the 116.Ar field Ns 'th 117field of 118.Ar file2 . 119.It Fl a Ar file_number 120In addition to the default output, produce a line for each unpairable 121line in file 122.Ar file_number . 123.It Fl e Ar string 124Replace empty output fields with 125.Ar string . 126.It Fl o Ar list 127Specifies the fields that will be output from each file for 128each line with matching join fields. 129Each element of 130.Ar list 131has the form 132.Dq file_number.field , 133where 134.Ar file_number 135is a file number and 136.Ar field 137is a field number, 138or the form 139.Dq 0 140(zero), 141representing the join field. 142The elements of list must be either comma 143.Pq Ql \&, 144or whitespace separated. 145(The latter requires quoting to protect it from the shell, or a simpler 146approach is to use multiple 147.Fl o 148options.) 149.It Fl t Ar char 150Use character 151.Ar char 152as a field delimiter for both input and output. 153Every occurrence of 154.Ar char 155in a line is significant. 156.It Fl v Ar file_number 157Do not display the default output, but display a line for each unpairable 158line in file 159.Ar file_number . 160The options 161.Fl v Ar 1 162and 163.Fl v Ar 2 164may be specified at the same time. 165.El 166.Sh EXIT STATUS 167.Ex -std join 168.Sh SEE ALSO 169.Xr awk 1 , 170.Xr comm 1 , 171.Xr lam 1 , 172.Xr paste 1 , 173.Xr sort 1 , 174.Xr uniq 1 175.Sh STANDARDS 176The 177.Nm 178utility is compliant with the 179.St -p1003.1-2008 180specification. 181.Pp 182In the absence of the 183.Fl o 184option, 185historical versions of 186.Nm 187wrote non-matching lines without reordering the fields. 188The current version writes the join field first, followed by the 189remaining fields. 190.Pp 191For compatibility with historical versions of 192.Nm join , 193the following options are available: 194.Bl -tag -width Fl 195.It Fl a 196In addition to the default output, produce a line for each unpairable line 197in both 198.Ar file1 199and 200.Ar file2 . 201.It Fl j Ar field 202Join on the 203.Ar field Ns 'th 204field of both 205.Ar file1 206and 207.Ar file2 . 208.It Fl j1 Ar field 209Join on the 210.Ar field Ns 'th 211field of 212.Ar file1 . 213.It Fl j2 Ar field 214Join on the 215.Ar field Ns 'th 216field of 217.Ar file2 . 218.It Fl o Ar list ... 219Historical implementations of 220.Nm 221permitted multiple arguments to the 222.Fl o 223option. 224These arguments were of the form 225.Dq file_number.field_number 226as described for the current 227.Fl o 228option. 229This has obvious difficulties in the presence of files named 230.Dq 1.2 . 231.El 232.Pp 233These options are available only so historical shell scripts don't require 234modification and should not be used. 235.Sh HISTORY 236A 237.Nm 238utility appeared in 239.At v7 . 240