join
file1 with file2
join [options] file1 file2
For each pair of input lines with identical join fields, write a line to standard output.
The default join field is the first, delimited by whitespace.
When file1 or file2 is - read standard input.
-a filenum output all lines of filenum
-v filenum | reverse, i.e. suppress joined output lines
| -t char separator char is for input and output fields
Default: leading blanks separate fields and are ignored.
| -i
--ignore-case ignore case
| -o auto|0|
filenum.field … format for output line
auto: the first line of each file determines the number of fields output for each line.
Default format outputs the join field, the remaining fields from
file1, the remaining fields from file2, all separated by char.
| -1 fieldnum join on this field of file 1 (origin 1)
| -2 fieldnum join on this field of file 2
| -j fieldnum equivalent to -1 field -2 field'
| --check-order | check that inputs are correctly sorted
| --nocheck-order | do not check that the input is correctly sorted
| --header | first line in each file is field header, always output them .
| -z
--zero-terminated 00 byte is used to end lines, not newline
| -e empty replace missing input fields with EMPTY
| --help
join --help
Usage: join [OPTION]... FILE1 FILE2
For each pair of input lines with identical join fields,
write a line to standard output.
The default join field is the first, delimited by whitespace.
When FILE1 or FILE2 (not both) is -, read standard input.
-a FILENUM also print unpairable lines from file FILENUM, where
FILENUM is 1 or 2, corresponding to FILE1 or FILE2
-e EMPTY replace missing input fields with EMPTY
-i, --ignore-case ignore differences in case when comparing fields
-j FIELD equivalent to '-1 FIELD -2 FIELD'
-o FORMAT obey FORMAT while constructing output line
-t CHAR use CHAR as input and output field separator
-v FILENUM like -a FILENUM, but suppress joined output lines
-1 FIELD join on this FIELD of file 1
-2 FIELD join on this FIELD of file 2
--check-order check that the input is correctly sorted, even
if all input lines are pairable
--nocheck-order do not check that the input is correctly sorted
--header treat the first line in each file as field headers,
print them without trying to pair them
-z, --zero-terminated end lines with 0 byte, not newline
--help display this help and exit
--version output version information and exit
--version | output version information and exit
| | | | | | | | | | | | | | | | | |
file1 and file2 must be sorted on the join fields.
Use sort -k 1b,1 if join has no options,
or use join -t '' if sort has no options.
If the input is not sorted and some lines cannot be joined, a warning message will be given.
Comparisons honor the rules specified by $LC_COLLATE.
Example
Seperator is the dot.
cat 0
0
111tatc.222
0.bash.222.txt
00-2222222222.html
|
cat 00
0
111tatc.222
0.bash.222.txt
00-2222222222.html
| join -e xxx -t . 0 00
0
111tatc.222.222
0.bash.222.txt.bash.222.txt
00-2222222222.html.html
|
Useful for Log and System Analysis: Combining separate logs (e.g., matching a system health log to an IP address mapping log using the hostname as the key).
User and Inventory Management: Merging employee names with salary tables using an Employee ID, or matching product descriptions with prices using SKU numbers.
Report Generation: Aggregating metrics from different system tools into a single, comprehensive text or CSV report.
Default: Performs an
Inner Join (only outputs lines where keys match in both files) using the first column as the key.join file1.txt file2.txt
names.txt:
101 Alice
102 Bob
103 Charlie
departments.txt
101 Engineering
102 Marketing
104 Sales
join names.txt departments.txt
Output (Inner Join):
101 Alice Engineering
102 Bob Marketing
=== occurs in both files.
=== taken from file1.
=== taken from file2.
keep lines from names.txt even if they don't have a matching department (Left Outer Join):
join -a 1 names.txt departments.txt
Output:
101 Alice Engineering
102 Bob Marketing
103 Charlie
Outer Join: Include unmatched rows (Left, Right, or Full Outer Joins).-a 1 (Left) / -a 2 (Right)