Linux join命令的使用及说明

 更新时间:2025年11月11日 15:16:39   作者:fengyehongWorld  
`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`join`命令支持多种参数,如指定连接键、字段分隔符、输出格式、空字段填充值、忽略大小写、输出未匹配行等

一. 基本语法

join 是 Linux 中用于按字段将两个文件进行连接的命令,功能类似 SQL 的 JOIN。

  • 要求两个文件按 用于匹配的字段排序好,一定要排序,否则无法正确join
  • 要求用于join的第一个文件的换行符是LF,一定不能是CRLF,否则无法正确匹配
参数说明
-1 N指定 file1 用第 N 字段作为连接键
-2 N指定 file2 用第 N 字段作为连接键
-t CHAR设置字段分隔符(如 -t , 表示用逗号)
-o FORMAT指定输出字段的格式,例如:-o 0 1.2 2.3
-a 1输出 file1 中所有行(即使没有匹配),相当于 LEFT OUTER JOIN
-a 2输出 file2 中所有行(即使没有匹配),相当于 RIGHT OUTER JOIN
-a 1 -a 2输出所有行(匹配和未匹配),相当于 FULL OUTER JOIN
-e STRING指定空字段填充值,用于 -a 显示未匹配时
-i忽略大小写(等价于 --ignore-case)
-v 1仅显示 file1 中未匹配的行
-v 2仅显示 file2 中未匹配的行

二. 数据准备

apluser@FengYeHong-HP:0725$ cat students1.txt
101 Alice
102 Bob
103 Carol
apluser@FengYeHong-HP:0725$ cat scores1.txt
101 80
102 90
104 95
apluser@FengYeHong-HP:0725$ cat students2.txt
101,Alice
102,Bob
103,Carol
apluser@FengYeHong-HP:0725$ cat scores2.txt
Alice,80
Bob,90
fengyehong,95

三. 指定文件的连接key

‘默认情况下使用文件的第1列进行join

apluser@FengYeHong-HP:0725$ join students1.txt scores1.txt
101 Alice 80
102 Bob 90
  • 1 1 -2 1:指定第1个文件的第1列和第2个文件的第1列作为join的key
  • -t, -1 2 -2 1
    • -t, :默认情况下使用空格作为列之间的分隔符,通过-t手动指定分隔符为逗号
    • -1 2 -2 1:指定第1个文件的第2列和第2个文件的第1列作为join的key
apluser@FengYeHong-HP:0725$ join -1 1 -2 1 students1.txt scores1.txt
101 Alice 80
102 Bob 90
apluser@FengYeHong-HP:0725$ join -t, -1 2 -2 1 students2.txt scores2.txt
Alice,101,80
Bob,102,90

四.-a输出指定文件的所有行

  • -a 1:输出第1个文件的所有行,相当于左连接
  • -a 2:输出第2个文件的所有行,相当于右连接
apluser@FengYeHong-HP:0725$ join -a 1 students1.txt scores1.txt
101 Alice 80
102 Bob 90
103 Carol
apluser@FengYeHong-HP:0725$ join -a 2 students1.txt scores1.txt
101 Alice 80
102 Bob 90
104 95
  • -a 1 -a 2:输出所有行
apluser@FengYeHong-HP:0725$ join -a 1 -a 2 students1.txt scores1.txt
101 Alice 80
102 Bob 90
103 Carol
104 95

五.-o指定输出的字段

  • -o 1.2 2.2 2.3
    • 输出第1个文件的第2个字段
    • 输出第2个文件的第2个和第3个字段
apluser@FengYeHong-HP:0725$ cat address1.txt
101 地球 火星
102 水星 金星
104 木星 土星
apluser@FengYeHong-HP:0725$ join students1.txt address1.txt
101 Alice 地球 火星
102 Bob 水星 金星

apluser@FengYeHong-HP:0725$ join -o 1.2 2.2 2.3 students1.txt address1.txt
Alice 地球 火星
Bob 水星 金星
apluser@FengYeHong-HP:0725$ join -o 1.2,2.2,2.3 students1.txt address1.txt
Alice 地球 火星
Bob 水星 金星

六.-v指定输出未匹配的行

  • 输出第1个和第2个文件中未匹配的内容
apluser@FengYeHong-HP:0725$ join -v 1 students1.txt address1.txt
103 Carol
apluser@FengYeHong-HP:0725$ join -v 2 students1.txt address1.txt
104 木星 土星
  • 输出第1个和第2个文件中未匹配的内容
apluser@FengYeHong-HP:0725$ join -v 1 -v 2 students1.txt address1.txt
103 Carol
104 木星 土星

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • linux创建线程之pthread_create的具体使用

    linux创建线程之pthread_create的具体使用

    这篇文章主要介绍了linux创建线程之pthread_create的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Linux如何修改固定ip地址(亲测有效)

    Linux如何修改固定ip地址(亲测有效)

    这篇文章主要介绍了Linux如何修改固定ip地址问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Centos8使用Squid配置代理服务器的详细过程

    Centos8使用Squid配置代理服务器的详细过程

    这篇文章主要介绍了Centos8使用Squid配置简单的代理服务器,安装过程中需要创建新账户并将其设置为管理账户,设置网络连接,简单的配置过程跟随小编一起看看吧
    2022-01-01
  • Linux内核页表及页表缓存原理

    Linux内核页表及页表缓存原理

    这篇文章主要介绍了Linux内核页表及Linux页表缓存原理,文章中又详细的图文介绍,感兴趣的小伙伴可以借鉴参考
    2023-04-04
  • linux采用scp命令拷贝文件到本地,拷贝本地文件到远程服务器的方法

    linux采用scp命令拷贝文件到本地,拷贝本地文件到远程服务器的方法

    今天小编就为大家分享一篇linux采用scp命令拷贝文件到本地,拷贝本地文件到远程服务器的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Linux运维从初级进阶为高级知识点总结

    Linux运维从初级进阶为高级知识点总结

    在本篇文章里小编给大家整理了关于Linux运维从初级进阶为高级知识点总结内容,需要的为朋友们学习下。
    2019-06-06
  • Linux中僵尸进程和孤儿进程详解

    Linux中僵尸进程和孤儿进程详解

    早就了解孤儿进程与僵尸进程,但仅仅是停留在一知半解的程度,最近正好有空就顺便学习一下,下面这篇文章主要给大家介绍了关于Linux中僵尸进程和孤儿进程的相关资料,文中介绍的非常详细,需要的朋友可以参考下。
    2017-06-06
  • linux下判断文件和目录是否存在的方法(总结)

    linux下判断文件和目录是否存在的方法(总结)

    下面小编就为大家带来一篇linux下判断文件和目录是否存在的方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 在 CentOS 8 上安装Jenkins的方法

    在 CentOS 8 上安装Jenkins的方法

    这篇文章主要介绍了在 CentOS 8 上安装Jenkins的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Linux高并发场景下的网络参数调优实战指南

    Linux高并发场景下的网络参数调优实战指南

    在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优化实践,手把手教你如何调优Linux网络参数,支撑百万级并发连接,需要的朋友可以参考下
    2025-05-05

最新评论