迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

Linux连接命令join

作者:迹忆 最近更新:2022/12/11 浏览次数:

join命令同样也是管道命令家族中的一员,它的作用是将每个文件中栏位(也就是第一列)相等的那些行的数据连接起来。

首先我们准备两个文件 /tmp/join1和/tmp/join2。

# cat /tmp/join1
www onmpw
domain jiyi
w3 blog
join command
ls l
# cat /tmp/join2
www com
domain cn
w3 net
Join org
wc l

准备好上面两个文件以后,我们先来看一看没有选项的join的用法。

# join /tmp/join1 /tmp/join2
www onmpw com
domain jiyi cn
w3 blog net

看到结果了吗。在join1 和join2文件中前三行的第一列的数据相等,因此会将这三行数据拼接。对于其他两行因为第一列字符串并不相等,所以也就不会拼接了。

这里我们可能注意到了一个地方,在join1文件中有join,而在join2中该行的第一列是Join。这应该怎么匹配呢?join默认是区分大小写的,所以二者看作是不相等的。要想使二者相等那我们就需要使用join的-i选项来实现。

-i 忽略大小写

# join /tmp/join1 /tmp/join2
www onmpw com
domain jiyi cn
w3 blog net
join command org

我们看,是不是多了一行。

-a FILENUM 在正常结果后面打印FILENUM那个文件的未被连接的行。

# join –a 2 /tmp/join1 /tmp/join2
www onmpw com
domain jiyi cn
w3 blog net
Join org
wc l
# join –a 1 /tmp/join1 /tmp/join2
www onmpw com
domain jiyi cn
w3 blog net
join command
ls l

看到上面的结果应该就能理解-a选项的含义了。在/tmp/join1 中 join command 和 ls l未被连接,所以-a 指定1的时候这两者被打印出来,同理-a指定2的时候 Join org 和 wc l 被打印出来。

-v FILENUM 该选项和-a功能相近,唯一不同的是-v不会输出连接的行,只输出指定文件中没有连接的行。

# join –v 1 /tmp/join1 /tmp/join2
join command
ls l
# join –v 2 /tmp/join1 /tmp/join2
Join org
wc l

-t 指定分隔符,默认情况下我们所说的栏位是以空格符分割出来的字段。通过该选项我们可以改变其栏位

# cat /tmp/join3
domain:cs
www:com
domain:cn
w3:net
Join:org
wc:l
# cat /tmp/join4
www:onmpw
domain:jiyi
w3:blog
join:command
ls:l

我们先看默认使用空格分割

# join /tmp/join3 /tmp/join4
//结果为空,因为每一列都不相等

接下来使用-t指定分隔符

# join –t : /tmp/join3 /tmp/join4
www:com:onmpw
domain:cn:jiyi
w3:net:blog

我们看是不是有结果了。没错,这就是-t的用法。

-o 指定需要连接的栏位。这是什么意思呢,默认的情况下连接的时候是第一位就是两个文件相同的栏位,然后就是按照 file1 file2的顺序依次连接两个文件的内容。使用该选项是指定我们想要连接的栏位,而不是所有的栏位都去连接。

它的格式如下

-o M.N,M.N

这里的M表示的是第几个文件,N表示的是连接第N个栏位。

-o 1.2,2.2

这个例子表示将文件1的第二个栏位和文件2的第二个栏位连接起来,当然前提是二者达到了连接的条件。

# join /tmp/join1 /tmp/join2  //先看默认情况
www onmpw com
domain jiyi cn
w3 blog net

我们看输出的结果是先是相同的栏位,然后依次是join1 再就是join2。

# join –o 1.1,2.2 /tmp/join1 /tmp/join2
www com
domain cn
w3 net

看我们指定连接栏位显示的结果。

# join –o 1.2,2.2 /tmp/join1 /tmp/join2
onmpw com
jiyi cn
blog net

指定第一个文件的第二个栏位和第二个文件的第二个栏位连接显示。现在应该明白-o的用法了吧!

-1 FIELD 指定用来比较的第一个文件的栏位

-2 FIELD 指定用来比较的第二个文件的栏位

我们知道,默认情况下用来进行比较的是两个文件的第一个栏位。使用上面的选项可以改变比较的栏位。

# cat /tmp/join5
onmpw www
jiyi domain
blog w3
command join
l ls

先看默认情况下join5和join2连接的结果

# join /tmp/join5 /tmp/join2
//结果为空

出现空结果的原因是join5文件的第一个栏位和join2文件的第一个栏位都不相等,所以没有可以连接的行。

# join -1 2 /tmp/join5 /tmp/join2
www onmpw com
domain jiyi cn
w3 blog net

我们指定了使用第一个文件,也就是join5文件,的第二个栏位和join2文件的第一个栏位比较就出现了结果,因为这两个栏位有相等的字符串。

明白了上面的例子,-1 FIELD和-2 FIELD 合用的情况也就不难理解了

# join -1 2 -2 2 /tmp/join5 /tmp/join2
//结果为空

-j FIELD 该选项的用法相当于 -1 FIELD -2 FIELD。这里就不再举例了。

关于join命令的具体用法我们就介绍到这。最后需要说明一下,在使用join对文件进行连接之前最好先对需要处理的文件排序,否则有些比对的数据会被略过。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

MySQL 中多列的 LEFT JOIN

发布时间:2023/05/08 浏览次数:92 分类:MySQL

在这篇简短的文章中,我们将了解如何在 MySQL 中进行左连接,我们还将查看相关示例并逐部分解释,以使主题更容易理解。在 MySQL 中使用 LEFT JOIN

在 Linux 中更新 YUM

发布时间:2023/05/04 浏览次数:82 分类:操作系统

本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。

在 Linux 中安装 Deb 文件

发布时间:2023/05/04 浏览次数:130 分类:操作系统

本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。

Linux 中的 lsof 命令

发布时间:2023/05/04 浏览次数:82 分类:操作系统

在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。

Linux 中的 ps aux 命令

发布时间:2023/05/04 浏览次数:69 分类:操作系统

本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。

Linux 中的 NTP

发布时间:2023/05/04 浏览次数:137 分类:操作系统

本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便