xref: /openbsd/usr.bin/join/join.1 (revision fc61954a)
1.\"	$OpenBSD: join.1,v 1.23 2014/01/19 23:56:06 schwarze 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: January 19 2014 $
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 Cm 1
162and
163.Fl v Cm 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