手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

join(1)

名称

join - 关系数据库运算符

用法概要

/usr/bin/join [-a filenumber] [-v filenumber] [-1 fieldnumber] 
     [-2 fieldnumber] [-o list] [-e string][-t char] file1 file2
/usr/bin/join [-a filenumber] [-j fieldumber] [-j1 fieldnumber] 
     [-j2 fieldnumber] [-o list] [-e string][-t char] file1 file2

描述

join 会针对文件 file1file2 执行等值联接操作,并将生成的联接后文件写入到标准输出。缺省情况下,字段由一个或多个空格和制表符分隔(且前导空格和/或制表符会被忽略)。可使用 –t 选项更改字段分隔符。

联接字段是每个文件中都有且据其比较文件的一个字段。缺省情况下,join 会针对 files1files2 中具有相同联接字段的每对行,将一行内容写入到输出。缺省的输出行由联接字段、file1 中的其他字段以及 file2 中的其他字段构成,但可通过 –o 选项对此进行更改。可使用 –a 选项将不匹配的行添加到输出。可以使用 –v 选项来只输出不匹配的行。

文件 file1file2 中要据其联接的字段必须按照 sort –b 的整理序列进行排序,否则结果不确定。

如果 file1file2-,则 join 将使用从当前位置开始的标准输入。

选项

下列部分选项使用参数 filenumber。此参数应当为 12,分别对应于 file1file2

–a filenumber

除了正常输出外,还会针对 filenumber 中无法配对的每个行生成一行,其中 filenumber12。如果同时指定了 –a 1–a 2,则会输出无法配对的所有行。

–e string

使用字符串 string 替换由选项 –o 所选的列表中的空输出字段。

–j fieldnumber

等效于 –1 fieldnumber –2fieldnumber。字段从 1 开始编号。

–j1 fieldnumber

等效于 –1 fieldnumber。字段从 1 开始编号。

–j2 fieldnumber

等效于 –2 fieldnumber。字段从 1 开始编号。

–o list

每个输出行都包含列表中指定的字段。如果列表所选的字段未出现在输入中,则会将其视为空输出字段。(请参见 –e 选项。)列表中每个元素的形式为 filenumber.fieldnumber ,或者为 0(表示联接字段)。除非特别要求,否则不会列出共有的字段。

–t char

使用字符 char 作为分隔符。行中出现的每个 char 都有其意义。字符 char 同时用作输入和输出的字段分隔符。指定了此选项时,整理条件应与未使用 –b 选项时的排序相同。

–v filenumber

针对 filenumber 中无法配对的每个行生成一行,而非生成缺省输出,其中 filenumber12。如果同时指定了 –v 1–v 2,则会输出无法配对的所有行。

–1 fieldnumber

依据文件 1 的第 fieldnumber 个字段进行联接。字段是从 1 开始的十进制整数。

–2 fieldnumber

依据文件 2 的第 fieldnumber 个字段进行联接。字段是从 1 开始的十进制整数。

操作数

支持下列操作数:

file1

要联接的文件的路径名。如果 file1file2 操作数是 ,则在其位置使用标准输入。

file2

要联接的文件的路径名。如果 file1file2 操作数是 ,则在其位置使用标准输入。

file1file2 中的行必须根据要据其联接的字段(通常是每行中的第一个字段)按照 LC_COLLATE 确定的递增整理序列排序(请参见 sort(1))。

用法

有关 join 遇到大于或等于 2 GB(231 字节)文件时行为的说明,请参见 largefile(5)

示例

示例 1 联接 password 文件和 Group 文件

以下命令行将联接口令文件和组文件,按数字组 ID 进行匹配,并输出登录名、组名和登录目录。它假定文件已依据组 ID 字段按 ASCII 整理序列进行了排序。

example% join -j1 4-j2 3 -o 1.1 2.1 1.6 -t:/etc/passwd /etc/group
示例 2 使用 –o 选项

–o 0 字段实际上会选择联接字段的联合。例如,对于文件 phone

!Name           Phone Number
Don             +1 123-456-7890
Hal             +1 234-567-8901
Yasushi         +2 345-678-9012

和文件 fax

!Name           Fax Number

Don             +1 123-456-7899

Keith           +1 456-789-0122

Yasushi         +2 345-678-9011

其中每个大片空白都意味着一个制表符,以下命令:

example% join -t"tab" -a 1 -a 2 -e '(unknown)' -o 0,1.2,2.2 phone fax

会生成

!Name           Phone Number           Fax Number
Don             +1 123-456-7890         +1 123-456-7899
Hal             +1 234-567-8901         (unknown
Keith           (unknown)               +1 456-789-012
Yasushi         +2 345-678-9012         +2 345-678-9011

环境变量

有关影响 join 执行的以下环境变量的描述,请参见 environ(5):LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、LC_COLLATE 和 NLSPATH。

退出状态

将返回以下退出值:

0

所有输入文件都已成功输出。

>0

出现错误。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os
CSI
Enabled(已启用)
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

另请参见

awk(1)comm(1)sort(1)uniq(1)attributes(5)environ(5)largefile(5)standards(5)

附注

使用缺省的字段分隔符时,整理序列为 sort b 的整理序列;指定了 –t 时,序列是普通排序的序列。

joinsortcommuniqawk 命令的约定极不一致。