join

将两个文件中,指定栏位内容相同的行连接起来.

语法

  join [Options]... File1 File2

选项



-a FILE-NUMBER
      除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行.

-e STRING
     若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。 

-i
--ignore-case
     比较栏位内容时,忽略大小写的差异

-1 FIELD
-j1 FIELD
     连接[文件1]指定的栏位。 

-2 FIELD
-j2 FIELD
     连接[文件2]指定的栏位。 

-j FIELD
     相当于 `-1 FIELD -2 FIELD'.

-o FIELD-LIST...
     按照指定的格式来显示结果。

-t CHAR
     使用指定字符作为输入和输出字段分隔符

-v FILE-NUMBER
    与-a相似 但值显示文件里没匹配上的行


实例:

文件 file1.txt
aa 1 2
bb 2 3
cc 4 6
dd 3 3
文件file2.txt
aa 2 1
bb 8 2
ff 2 4
cc 4 4
dd 5 5

1.默认已两个文件的第一行做匹配字段,默认以空格(不限个数)做分隔符

$ join file1.txt file2.txt
输出:aa 1 2 2 1
     bb 2 3 8 2

2.-j选项 指定了以两个文件里第一列做匹配字段 等同于join file1.txt file2.txt

$ join -j 1 file1.txt file2.txt
输出:aa 1 2 2 1
     bb 2 3 8 9
  1. 以第一个文件的第二列和第二个文件的第三列做匹配字段。因为第二个文件里第三列的两个3 都与第一个文件里第三行因此输出

    $ join -1 2 -2 3 file1.txt file2.txt
    输出: 1 aa 2 aa 2
    2 bb 3 bb 8
    4 cc 6 ff 2
    4 cc 6 cc 4

  2. -o 指定 将file1的1,2,3列,file2的1,2,3 列都输出。-a指定将file1中不匹配的行也输出,可是file2中沒有与file1后两行相应的字段,因此使用empty补齐。

    $ join -o 1.1 -o 1.2 -o 1.3 -o 2.1 -o 2.2 -o 2.3 -e ‘empty’ -a 1 file1.txt file2.txt
    输出: aa 1 2 aa 2 1
    bb 2 3 bb 8 2
    cc 4 6 empty empty empty
    dd 3 3 empty empty empty

5.尽管file1和file2都已经排序,可是因为在第三行时開始不匹配因此仅仅匹配上了前两行,后面的行尽管字段也能够相应可是以不能匹配。join命令,对文件格式的要求很强,假设想要更灵活的使用,可用AWK命令,參加AWK实例

$ join -v 1 file1.txt file2.txt 
输出: cc 4 6
dd 3 3

-v 1 将file1中不匹配的行输出
PS:join命令和数据库中的join命令很相似。

  1. join 标准输入
    有时我们须要将多个格式同样的文件join到一起,而join接受的是两个文件的指令,此时我们能够使用管道和字符“-"来实现

    $ join file1 file2 | join - file3 | join - file4 
    

这样就能够将四个文件 连接到 一起了。

join 命令实例:

linux命令:join file1.txt file2.txt > file3.txt file3.txt > file2.txt file1.txt join join file1.txt file2.txt > file3.txtrootopen.com
linux命令:join file1.txt file2.txt > file3.txt file3.txt > file2.txt file1.txt join join file1.txt file2.txt > file3.txtrootopen.com
2018-05-02 13:07:48

linux命令:joinargs() { (IFS="$1"; shift && echo "$*") } } "$*") echo && shift (IFS="$1"; { joinargs() joinargs() { (IFS="$1"; shift && echo "$*") }rootopen.com
linux命令:joinargs() { (IFS="$1"; shift && echo "$*") } } "$*") echo && shift (IFS="$1"; { joinargs() joinargs() { (IFS="$1"; shift && echo "$*") }rootopen.com
2018-05-26 20:19:48

linux命令:join employee.txt bonus.txt bonus.txt employee.txt join join employee.txt bonus.txtrootopen.com
linux命令:join employee.txt bonus.txt bonus.txt employee.txt join join employee.txt bonus.txtrootopen.com
2018-05-06 06:14:48

Linux的Bash命令行(A-Z排序)