Linux连接命令join
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对文件进行连接之前最好先对需要处理的文件排序,否则有些比对的数据会被略过。
相关文章
在 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 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。