国际访客建议访问 Primers 编程伙伴 国际版站点 > Bash 教程 > join 以获得更好的体验。

# Bash 的 df 命令

join [OPTION]... FILE1 FILE2

!subtitle:功能

将两个文件中的行按照公共字段连接。

!subtitle:类型

可执行文件(/usr/bin/join),属于 coreutils

!subtitle:参数

  • OPTION 选项:

    • -1 FIELD - FILE1 根据 FIELD 字段进行匹配

    • -2 FIELD - FILE2 根据 FIELD 字段进行匹配

    • -a FILENUM - FILENUM 取 1 或 2,表示 FILE1FILE2,额外打印对应文件中不可配对的行

    • -e STRING - 使用 STRING 填补缺失的空行

    • -i, --ignore-case - 比较字段时忽略大小写

    • -j FIELD - FILE1FILE2 都根据 FIELD 字段进行匹配

    • -o FORMAT - 输出格式

    • -t CHAR - 使用 CHAR 作为输入和输出的分隔符

    • -v FILENUM - FILENUM 取 1 或 2,表示 FILE1FILE2,仅打印对应文件中不可配对的行

    • --check-order - 检查输入是否正确排序

    • --nocheck-order - 不检查输入是否正确排序

    • --header - 将每个文件的第一行视作字段标题,直接打印,不进行匹配

    • -z, --zero-terminated - 以空字符(\0)作为行的结尾,而不是换行符(\n

    • --help - 显示帮助

    • --version - 显示版本

  • FILE1 - 要连接的文件1

  • FILE2 - 要连接的文件2

# 示例

$ cat 1.txt
1 Alice
2 Bob
3 Carol
$ cat 2.txt
1 90
2 85
4 70
$ join 1.txt 2.txt          # 默认按照第一列合并
1 Alice 90
2 Bob 85
$ join -a 1 1.txt 2.txt     # 保留文件 1 中未匹配的行
1 Alice 90
2 Bob 85
3 Carol
$ join -a 1 1.txt 2.txt     # 仅打印文件 1 中未匹配的行
3 Carol

# 推荐阅读

# 手册

JOIN(1)                          User Commands                         JOIN(1)

NAME
       join - join lines of two files on a common field

SYNOPSIS
       join [OPTION]... FILE1 FILE2

DESCRIPTION
       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
       blanks.

       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 STRING
              replace missing (empty) input fields with STRING; I.e.,  missing
              fields specified with '-12jo' options

       -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
              line delimiter is NUL, not newline

       --help display this help and exit

       --version
              output version information and exit

       Unless  -t  CHAR  is  given, leading blanks separate fields and are ig‐
       nored, else fields are separated by CHAR.  Any FIELD is a field  number
       counted  from 1.  FORMAT is one or more comma or blank separated speci‐
       fications, each being 'FILENUM.FIELD' or '0'.  Default  FORMAT  outputs
       the  join  field, the remaining fields from FILE1, the remaining fields
       from FILE2, all separated by CHAR.  If FORMAT is  the  keyword  'auto',
       then the first line of each file determines the number of fields output
       for each line.

       Important:  FILE1  and  FILE2 must be sorted on the join fields.  E.g.,
       use "sort -k 1b,1" if 'join' has no options, or use  "join  -t  ''"  if
       'sort'  has no options.  Note, comparisons honor the rules specified by
       'LC_COLLATE'.  If the input is not sorted  and  some  lines  cannot  be
       joined, a warning message will be given.

AUTHOR
       Written by Mike Haertel.

REPORTING BUGS
       GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
       Report any translation bugs to <https://translationproject.org/team/>

COPYRIGHT
       Copyright  ©  2023  Free Software Foundation, Inc.  License GPLv3+: GNU
       GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
       This is free software: you are free  to  change  and  redistribute  it.
       There is NO WARRANTY, to the extent permitted by law.

SEE ALSO
       comm(1), uniq(1)

       Full documentation <https://www.gnu.org/software/coreutils/join>
       or available locally via: info '(coreutils) join invocation'

GNU coreutils 9.4                 April 2024                           JOIN(1)
本文 更新于: 2025-11-27 09:38:15 创建于: 2025-11-27 09:38:15