zoukankan      html  css  js  c++  java
  • 数据连接命令join

    join主要用来将两个相关联的文件连接起来。两个文件相关联的意思是指这两个文件中有一些字段是关联的,例如两个文件的第1个字段都是学号,且每个学生的学号是唯一的。像这种具有唯一性关联的文件,就可以使用join命令连接。

    • 命令格式:

    join [option] file1 file2

    • 常用选项:

    a:用于输出两个文件中有关联的和没有关联的行,将有关联的行执行连接后输出,没有关联的行按预定的格式输出。

    e:在文件1和文件2中查找关联字段,如果没有关联字段,则将无关联的行相应的字段用参数指定的字符串替代。

    i:在连接过程中忽略大小写。

    j:使用指定的字段作为关联字段连接。

    o:格式化输出。

    t:设置字段间的分隔符,默认为空格或制表符Tab。

    v:与选项a的作用相同,但选项v只输出无关联的行。

    使用join命令时,join用数字1来表示参数文件1,用数字2表示参数文件2.

    • 用法示例:

    (1)默认情况下join会使用参数文件的第1个字段作为关联字段。例如:

    [root@localhost test]# cat join1
    001     Tom
    002     Jim
    003     Kate
    004     Marry
    005     Lucy
    [root@localhost test]# cat join2
    001     Tom     80
    003     Kate    90
    005     Lucy    100
    006     Jicy    80
    008     Tame    90
    [root@localhost test]# join join1 join2
    001 Tom Tom 80
    003 Kate Kate 90
    005 Lucy Lucy 100

    从上面的结果可以看出,直接使用join连接:

    join在进行连接时,没有输出两个文件无关联的记录。

    默认输出以空格为字段分隔符。

    输出结果中,两个文件相关联的字段只输出一次。

    (2)需要查看无关联字段记录时,可以使用选项a或v:

    #使用参数a1、a2显示两个文件中的无关联记录(同时包括了把关联的行连接后的输出)
    [root@localhost test]# join -a1 -a2 join1 join2
    001 Tom Tom 80
    002 Jim
    003 Kate Kate 90
    004 Marry
    005 Lucy Lucy 100
    006 Jicy 80
    008 Tame 90
     
    #使用参数v1、v2显示两个文件中的无关联记录(只显示没有关联的记录)
    [root@localhost test]# join -v1 -v2 join1 join2
    002 Jim
    004 Marry
    006 Jicy 80
    008 Tame 90

    (3)使用连接时,可能不需要显示两个文件中的所有字段,例如join1和join2都包括了姓名,join2的姓名就不必再显示。此时可以使用选项o格式输出,将不需要输出的字段屏蔽。

    #使用选项o指定连接后只显示参数文件1中的域1(1.1)、参数文件1中的域2(1.2)和参数文件2中的域3(2.3)
    [root@localhost test]# join -o "1.1,1.2,2.3" join1 join2
    001 Tom 80
    003 Kate 90
    005 Lucy 100

    (4)当两个文件相关联的字段不在文件第1个字段时,需要使用选项j向join指定两个文件中的关联字段:

    #使用选项-j1 2指定参数文件1的第2个字段作为关联字段;使用选项-j2 2指定参数文件2的第2个字段作为关联字段。
    [root@localhost test]# join -j1 2 -j2 2 join1 join2
    Tom 001 001 80
    Kate 003 003 90

    (4)对于要连接的两个文件不是使用空格或制表符作为字段分隔符的,需要使用选项t指定文本的字段分隔符:

    [root@localhost test]# cat join5
    001#Tom
    002#Jim
    003#Kate
    004#Marry
    005#Lucy
    [root@localhost test]# cat join6
    001#Tom#80
    003#Kate#90
    005#Lucy#100
    006#Jicy#80
    008#Tame#90

    [root@localhost test]# join -t"#" join5 join6
    001#Tom#Tom#80
    003#Kate#Kate#90
    005#Lucy#Lucy#100

    (5)对没有与之相关联的对应的相关字段进行标记,以便于在执行完连接操作后,将这些没有关联的记录进行补充或修改。此时可以使用选项e对这些记录进行标记:

    [root@localhost test]# join -e "#" -a1 -a2 -o "1.1,1.2,2.1,2.3" join1 join2
    001 Tom 001 80
    002 Jim # #
    003 Kate 003 90
    004 Marry # #
    005 Lucy 005 100
    # # 006 80
    # # 008 90

    使用e选项指定填充字符时,必须使用选项o对输出进行格式化,否则选项e将无法找到要填充的字段位置。

    注意:使用join进行连接时,应该先以两个文件的关联字段为关键字,进行排序操作,否则在进行连接时可能会出现一些意外的错误。

  • 相关阅读:
    Resample the mask
    高斯消元法
    java中的大数BigInteger
    JAVA中如何使用SORT从大到小排
    Java中Array.sort()的几种用法简明教程 (需要初始化要排序的对象)
    java中两个字符串如何比较大小
    java数组初始化函数
    BestCoder Round #89 Fxx and string
    Flooded!
    基础练习 数列排序
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3464626.html
Copyright © 2011-2022 走看看