连接两个文件的数据字段。
join [ -a FileNumber | -v FileNumber ] [ -e String ] [ -o List ] [ -t Character ] [ -1 Field ] [ -2 Field ] File1 File2
join 命令读取由 File1 和 File2 参数指定的文件,根据标志连接文件中的行,并且把结果写到标准输出中。File1 和 File2 参数必须为文本文件。File1 和 File2 都必须以 -b 字段的整理顺序排序,它们将按照此字段在调用 join 命令之前连接。
对于出现在两个文件中的每一个相同连接字段,在输出中只出现一行。连接字段是在输入文件中由 join 命令来确定包含在输出文件中的字段。输出行包含连接字段、 File1 参数指定的文件的其余行和由 File2 参数指定的文件的其余行。通过用 - (划线)代替文件名,来指定标准输入来代替 File1 或者 File2 参数。 两个输入文件都不能带 - (划线)来指定。
字段通常由一个空格、一个制表符或换行符来分割。这样,join 命令把连续的分隔符作为一个并废弃前导分隔符。
-1 Field | 用由 File1 输入文件中的 Field 变量指定的字段来连接两个文件。Field 变量的值必须为一个正的十进制整数。 |
-2 Field | 用由 File2 输入文件中的 Field 变量指定的字段来连接两个文件。Field 变量的值必须为一个正的十进制整数。 |
-a FileNumber | 给由 FileNumber 变量指定的文件的每一行产生一个输出行,此变量的连接字段和其它的输入文件中的任何一行都不匹配。产生输出行,除了缺省输出之外。FileNumber 变量的值 必须为 1 或 2,各自相应于由 File1 和 File2 参数指定的文件。如果这个标志和 -v 标志一起指定,则忽略该标志。 |
-e String | 用 String 变量指定的字符串来代替空输出字段。 |
-o List | 构造一个输出行来包含由 List 变量指定的字段。适用于 List 变量的以下格式之一: |
-t Character | 用由 Character 参数指定的字符作为输入和输出的字段分隔符。 在行上出现的每一个字符都是有效数字。缺省的分隔符是一个空格。有了缺省字段分割符,整理顺序是 sort -b 命令的结果。 如果指定了 -t,顺序是一个简单的排序。 指定了一个制表符,把它包括在单引号中。 |
-v FileNumber | 为由 FileNumber 变量指定的文件的每一行产生一个输出行,此变量的连接字段和其他的输入文件的任何一行都不匹配。缺省输出是不产生。FileNumber 变量的值必须为 1 或 2,各自相应于由 File1 和 File2 参数指定的文件。如果此标志和 -a 标志一起指定,则忽略 -a 标志。 |
此命令返回下列退出值:
0 | 成功完成。 |
>0 | 发生一个错误。 |
join phonedir names
如果 phonedir 文件包含 以下 名称:
Adams A. 555-6235 Dickerson B. 555-1842 Erwin G. 555-1234 Jackson J.
并且 names 文件包含这些名字和部门号:
Erwin Dept. 389 Frost Dept. 217 Nicholson Dept. 311 Norwood Dept. 454 Wright Dept. 520 Xandy Dept. 999
join 命令显示:
Erwin G. 555-1234 Dept. 389 Norwood M. 555-5341 Dept. 454 Wright M. 555-1234 Dept. 520 Xandy G. 555-5015 Dept. 999
每一行包含了连接字段(最后一个名字),后面跟着在 phonedir 文件和 names 文件中找到的其余几行。
Erwin G. 555-1234 Dept. 389 Frost Dept. 217 Nicholson Dept. 311 Norwood M. 555-5341 Dept. 454 Wright M. 555-1234 Dept. 520 Xandy G. 555-5015 Dept. 999
此命令执行了和示例 1 中相同的连接操作,并且列出了在 phonedir 文件中行名字不匹配的行。名字 Frost 和 Nicholson 包括在列表中, 即使它们在 phonedir 文件中没有项。
names 的字段 3 | 部门号 |
names 的字段 1 | 姓 |
phonedir 的字段 2 | 名字第一个字母 |
phonedir 的字段 3 | 电话号码 |
389 Erwin G. 555-1234 454 Norwood M. 555-5341 520 Wright M. 555-1234 999 Xandy G. 555-5015
第一,这个命令通过第三个字段来排序 phonedir 文件,因为文件必须通过它们的连接字段来排序。然后 sort 命令的输出传送给 join 命令。-(划线)自己使 join 命令把此输出作为自己的第一个文件。-1 3 标志 把已排序的 phonedir 文件 的第三个字段作为连接字段。 这与 numbers 的第一个字段做比较,因为它的连接字段没有指定用 -2 标志。
如果 numbers 文件包含:
555-0256 555-1234 555-5555 555-7358
然后此命令显示了列在 phonedir 文件的名字或每个电话号码:
555-0256 Jackson J. 555-1234 Erwin G. 555-1234 Wright M.
注意 join 命令 命令列出了所给定的字段中的匹配项。在这种情况下,join 命令列出了 Erwin G. 和 Wright M.,因为有电话号码 555-1234。号码 555-5555 没有列出来,因为它没有出现在 phonedir 文件中。
/usr/bin/join | 包含 join 命令。 |
/usr/lib/nls/loc/*.src | 包含整理信息。 |
awk 命令、comm 命令、cut 命令、paste 命令、sort 命令。
在《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『文件概述』。
在《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『输入输出重定向概述』。
在 AIX 5L Version 5.2 National Language Support Guide and Reference 中的 National Language Support Overview for Programming。