连接两个文件的数据字段-join命令

join 命令

用途

连接两个文件的数据字段。

语法

join-a FileNumber -v FileNumber ] [  -e String ] [  -o List ] [  -t Character ] [ -1 Field ] [  -2 Field File1 File2

描述

join 命令读取由 File1File2 参数指定的文件,根据标志连接文件中的行,并且把结果写到标准输出中。File1File2 参数必须为文本文件。File1File2 都必须以 -b 字段的整理顺序排序,它们将按照此字段在调用 join 命令之前连接。

对于出现在两个文件中的每一个相同连接字段,在输出中只出现一行。连接字段是在输入文件中由 join 命令来确定包含在输出文件中的字段。输出行包含连接字段、 File1 参数指定的文件的其余行和由 File2 参数指定的文件的其余行。通过用 - (划线)代替文件名,来指定标准输入来代替 File1 或者 File2 参数。 两个输入文件都不能带 - (划线)来指定。

字段通常由一个空格、一个制表符或换行符来分割。这样,join 命令把连续的分隔符作为一个并废弃前导分隔符。

标志

 

-1 Field用由 File1 输入文件中的 Field 变量指定的字段来连接两个文件。Field 变量的值必须为一个正的十进制整数。
-2 Field用由 File2 输入文件中的 Field 变量指定的字段来连接两个文件。Field 变量的值必须为一个正的十进制整数。
-a FileNumber给由 FileNumber 变量指定的文件的每一行产生一个输出行,此变量的连接字段和其它的输入文件中的任何一行都不匹配。产生输出行,除了缺省输出之外。FileNumber 变量的值必须为 1 或 2,各自相应于由 File1File2 参数指定的文件。如果这个标志和 -v 标志一起指定,则忽略该标志。
-e StringString 变量指定的字符串来代替空输出字段。
-o List构造一个输出行来包含由 List 变量指定的字段。适用于 List 变量的以下格式之一:
FileNumber.Field
其中 FileNumber 是一个文件号, Field 是一个十进制整数字段号。用 (逗号)或空格字符来分割多个字段,并且前后用引号括起来。
0(零)
表示连接字段。 -o 0 标志本质上是选择连接字段的联合。
-t Character用由 Character 参数指定的字符作为输入和输出的字段分隔符。在行上出现的每一个字符都是有效数字。缺省的分隔符是一个空格。有了缺省字段分割符,整理顺序是 sort -b 命令的结果。如果指定了 -t,顺序是一个简单的排序。指定了一个制表符,把它包括在单引号中。
-v FileNumber为由 FileNumber 变量指定的文件的每一行产生一个输出行,此变量的连接字段和其他的输入文件的任何一行都不匹配。缺省输出是不产生。FileNumber 变量的值必须为 1 或 2,各自相应于由 File1File2 参数指定的文件。如果此标志和 -a 标志一起指定,则忽略 -a 标志。

退出状态

此命令返回下列退出值:

0成功完成。
>0发生一个错误。

示例

注:
下面示例中显示的垂直对齐的值或许会和您的输出不一致。
  1. 要在第一个字段相同的两个文件中执行一个简单的连接操作,请输入:

     

    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 文件中找到的其余几行。

  2. 要用 join 命令显示不匹配的行,请输入:
    join  -a1 phonedir names
    如果 phonedir name 文件是和示例 1 相同的,join 命令显示:

     

    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 文件中行名字不匹配的行。名字 FrostNicholson 包括在列表中,即使它们在 phonedir 文件中没有项。

  3. 要用 join 命令来显示选择的字段,请输入:
    join  -o 2.3,2.1,1.2,1.3 phonedir names
    按照所给出的顺序显示下列字段:
    names 的字段 3部门号
    names 的字段 1
    phonedir 的字段 2名字第一个字母
    phonedir 的字段 3电话号码
    如果 phonedir  文件和 names 文件与示例 1 中的相同,则 join 命令显示:

     

    389              Erwin G.        555-1234
    454              Norwood M.      555-5341
    520              Wright M.       555-1234
    999              Xandy G.        555-5015
  4. 要执行一个非第一个字段的连接操作,请输入:
    sort +2 -3 phonedir | join  -1 3 - numbers
    这个命令把 phonedirnumbers 文件中的行连接起来,通过比较 phonedir 文件的第三个字段和 numbers 文件的第一个字段。

    第一,这个命令通过第三个字段来排序 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包含整理信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值