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进行连接时,应该先以两个文件的关联字段为关键字,进行排序操作,否则在进行连接时可能会出现一些意外的错误。

数据连接命令join的更多相关文章

  1. 多表数据连接 Left join

    一个我写的实例:其中多表连接,一共连接了3个表.使用聚集函数SUM,用到了GROUP BY SELECT a.[UserID],b.[Name],sum (c.[Money]+c.[Bank])as  ...

  2. 【Hive】Hive笔记:Hive调优总结——数据倾斜,join表连接优化

    数据倾斜即为数据在节点上分布不均,是常见的优化过程中常见的需要解决的问题.常见的Hive调优的方法:列剪裁.Map Join操作. Group By操作.合并小文件. 一.表现 1.任务进度长度为99 ...

  3. python全栈开发day113-DBUtils(pymysql数据连接池)、Request管理上下文分析

    1.DBUtils(pymysql数据连接池) import pymysql from DBUtils.PooledDB import PooledDB POOL = PooledDB( creato ...

  4. SQL server 数据连接池使用情况检测

    1.依据HOST_NAME请求session_id 查询 select DB_NAME(database_id) dbname,login_name,t1.session_id,t1.request_ ...

  5. SQLServer 数据修复命令DBCC一览

    1. DBCC CHECKDB  重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复,修复数据库存在的一致性错误与分配错误. use master decla ...

  6. sql表连接left join,right join,inner join三者之间的区别

    sql表连接left join,right join,inner join区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 (以左表数据为基准,不足补为NULL) ...

  7. 2016022613 - redis连接命令集合

    redis连接命令 1.ping 用途:检查服务器是否正在运行 返回数据pong,表示服务器在运行. 2.quit 用途:关掉当前服务器连接 3.auth password 用途:服务器验证密码 没有 ...

  8. EF Linq中的左连接Left Join查询

    linq中的join是inner join内连接,就是当两个表中有一个表对应的数据没有的时候那个关联就不成立. 比如表A B的数据如下 from a in A join b in B on a.BId ...

  9. 左连接LEFT JOIN 连接自己时的查询结果测试

    #左连接LEFT JOIN 连接自己时的查询结果测试 #左连接LEFT JOIN 连接自己时的查询结果(都会出现两个重复字段),两个表都有as后只能查询相等条件merchant_shop_id非nul ...

随机推荐

  1. jboss服务器配置多实例

    jboss配置多实例的重要性 在开发, 测试项目的过程中, 我们经常需要在同一台主机上, 同一个服务器上配置多个运行实例.这样做有一下几点好处: 在项目开发, 调试阶段能最大限度的节省资源 某个实例出 ...

  2. jetty8的多实例部署(LT项目开发参考)

    LT项目使用的EIP是运行在JETTY上,此文供开发和实施参考 1.windows下 win下部署多个jetty8很简单,首先将jetty8复制多个文件夹,其次按分配的端口号修改[JETTY_HOME ...

  3. jq 写法

    <!doctype html> <html> <head> <meta charset="utf-8"> <script sr ...

  4. 第二百二十八天 how can I 坚持

    hibernate 还有好多不会搞啊,本来很简单的东西,没用过就不会. 今天... 只是感觉很累,昨天爬山爬的,不知道该写点啥了,买的羽绒服到了,还行吧,凑合穿吧. 睡觉了.今天貌似又发脾气了.哎.. ...

  5. area标签circle/rect/poligon坐标

    <img src="images/02.gif" title="flower" usemap="#mm" /> <map ...

  6. Dom操作的分类

    1.DOM core 使用DOM core来获取表单对象的方法: document.getElementByTagName("form"); 使用DOM Core来获取某元素的sr ...

  7. 编译安装-PHP

    一.编译配置选项2 配置帮助表:2 安装目录:2 交叉编译选项:2 特征选项:3 SAPI模块设置:3 普通参数设置:4 扩展参数:4 PEAR相关选项:9 ZEND相关选项:9 TSRM线程安全资源 ...

  8. 分享吉林大学机械科学与工程学院,zhao jun 博士的Halcon学习过程及知识分享

    分享吉林大学机械科学与工程学院,zhao jun 博士的Halcon学习过程及知识分享 全文转载zhao jun 博士的新浪博客,版权为zhaojun博士所有 原文地址:http://blog.sin ...

  9. sql server对并发的处理-乐观锁和悲观锁【粘】

    假如两个线程同时修改数据库同一条记录,就会导致后一条记录覆盖前一条,从而引发一些问题. 例如: 一个售票系统有一个余票数,客户端每调用一次出票方法,余票数就减一. 情景: 总共300张票,假设两个售票 ...

  10. ASP.NET MVC- 视图

    关于视图的一些一些一些 一.Action指定使用视图 public ActionResult Add(string txtName, string txtContent) { return View( ...