/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 会针对文件 file1 和 file2 执行等值联接操作,并将生成的联接后文件写入到标准输出。缺省情况下,字段由一个或多个空格和制表符分隔(且前导空格和/或制表符会被忽略)。可使用 –t 选项更改字段分隔符。
联接字段是每个文件中都有且据其比较文件的一个字段。缺省情况下,join 会针对 files1 和 files2 中具有相同联接字段的每对行,将一行内容写入到输出。缺省的输出行由联接字段、file1 中的其他字段以及 file2 中的其他字段构成,但可通过 –o 选项对此进行更改。可使用 –a 选项将不匹配的行添加到输出。可以使用 –v 选项来只输出不匹配的行。
文件 file1 和 file2 中要据其联接的字段必须按照 sort –b 的整理序列进行排序,否则结果不确定。
如果 file1 或 file2 为 -,则 join 将使用从当前位置开始的标准输入。
下列部分选项使用参数 filenumber。此参数应当为 1 或 2,分别对应于 file1 或 file2。
除了正常输出外,还会针对 filenumber 中无法配对的每个行生成一行,其中 filenumber 是 1 或 2。如果同时指定了 –a 1 和 –a 2,则会输出无法配对的所有行。
使用字符串 string 替换由选项 –o 所选的列表中的空输出字段。
等效于 –1 fieldnumber –2fieldnumber。字段从 1 开始编号。
等效于 –1 fieldnumber。字段从 1 开始编号。
等效于 –2 fieldnumber。字段从 1 开始编号。
每个输出行都包含列表中指定的字段。如果列表所选的字段未出现在输入中,则会将其视为空输出字段。(请参见 –e 选项。)列表中每个元素的形式为 filenumber.fieldnumber ,或者为 0(表示联接字段)。除非特别要求,否则不会列出共有的字段。
使用字符 char 作为分隔符。行中出现的每个 char 都有其意义。字符 char 同时用作输入和输出的字段分隔符。指定了此选项时,整理条件应与未使用 –b 选项时的排序相同。
针对 filenumber 中无法配对的每个行生成一行,而非生成缺省输出,其中 filenumber 是 1 或 2。如果同时指定了 –v 1 和 –v 2,则会输出无法配对的所有行。
依据文件 1 的第 fieldnumber 个字段进行联接。字段是从 1 开始的十进制整数。
依据文件 2 的第 fieldnumber 个字段进行联接。字段是从 1 开始的十进制整数。
支持下列操作数:
要联接的文件的路径名。如果 file1 或 file2 操作数是 −,则在其位置使用标准输入。
要联接的文件的路径名。如果 file1 或 file2 操作数是 −,则在其位置使用标准输入。
file1 和 file2 中的行必须根据要据其联接的字段(通常是每行中的第一个字段)按照 LC_COLLATE 确定的递增整理序列排序(请参见 sort(1))。
有关 join 遇到大于或等于 2 GB(231 字节)文件时行为的说明,请参见 largefile(5)。
以下命令行将联接口令文件和组文件,按数字组 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。
将返回以下退出值:
所有输入文件都已成功输出。
出现错误。
有关下列属性的说明,请参见 attributes(5):
|
awk(1)、comm(1)、sort(1)、uniq(1)、attributes(5)、environ(5)、largefile(5)、standards(5)
使用缺省的字段分隔符时,整理序列为 sort –b 的整理序列;指定了 –t 时,序列是普通排序的序列。
join、sort、comm、uniq 和 awk 命令的约定极不一致。