如何在linux上使用join命令

如果要通过匹配公共字段来合并两个文本文件中的数据,可以使用Linux join命令。它为静态数据文件添加了些许活力。我们会教你怎么使用它。...

如果要通过匹配公共字段来合并两个文本文件中的数据,可以使用Linux join命令。它为静态数据文件添加了些许活力。我们会教你怎么使用它。

跨文件匹配数据

数据为王。公司、企业和家庭都在这上面经营。但是数据存储在不同的文件中,由不同的人整理,这是一种痛苦。除了知道要打开哪些文件来查找所需的信息外,文件的布局和格式可能会有所不同。

您还必须处理管理方面的难题,即哪些文件需要更新,哪些需要备份,哪些是遗留文件,哪些可以存档。

另外,如果您需要整合数据或跨整个数据集进行一些分析,您还有一个问题。在处理不同文件的数据之前,如何使其合理化?如何进入数据准备阶段?

好消息是,如果这些文件至少共享一个公共数据元素,那么linuxjoin命令可以让您摆脱困境。

数据文件

我们将用于演示join命令使用的所有数据都是虚构的,从以下两个文件开始:

cat file-1.txt cat file-2.txt

如何在linux上使用join命令

以下是file-1.txt的内容:

1 Adore Varian [email protected] Female 192.57.150.231 2 Nancee Merrell [email protected] Female 22.198.121.181 3 Herta Friett [email protected] Female 33.167.32.89 4 Torie Venmore [email protected] Female 251.9.204.115 5 Deni Sealeaf [email protected] Female 210.53.81.212 6 Fidel Bezley [email protected] Male 72.173.218.75 7 Ulrikaumeko Standen [email protected] Female 4.204.0.237 8 Odell Jursch [email protected] Male 1.138.85.117

我们有一组编号的行,每行包含以下所有信息:

  • 一个数字
  • 名字
  • 姓氏
  • 电子邮件地址
  • 此人的性别
  • IP地址

以下是file-2.txt的内容:

1 Varian [email protected] Female Western New York $535,304.73 2 Merrell [email protected] Female Finger Lakes $309,033.10 3 Friett [email protected] Female Southern Tier $461,664.44 4 Venmore [email protected] Female Central New York $175,818.02 5 Sealeaf [email protected] Female North Country $126,690.15 6 Bezley [email protected] Male Mohawk Valley $366,733.78 7 Standen [email protected] Female Capital District $674,634.93 8 Jursch [email protected] Male Hudson Valley $663,821.09

file-2.txt中的每一行都包含以下信息:

  • 一个数字
  • 姓氏
  • 电子邮件地址
  • 此人的性别
  • 纽约的一个地区
  • 一美元的价值

join命令与“fields”一起使用,在本文中,fields表示由空格、行的开始或行的结束包围的文本部分。为了使join匹配两个文件之间的行,每行必须包含一个公共字段。

因此,只有在两个文件中都显示字段时,才能匹配该字段。IP地址只出现在一个文件中,所以这不好。第一个名称只出现在一个文件中,因此我们也不能使用它。姓氏在两个档案中,但这是一个很差的选择,因为不同的人有相同的姓氏。

你也不能将数据与**和**条目联系在一起,因为它们太模糊了。纽约地区和美元值也只出现在一个文件中。

但是,我们可以使用电子邮件地址,因为它在两个文件中都存在,并且每个文件对一个人都是唯一的。快速浏览文件还可以确认每个文件中的行对应于同一个人,因此我们可以使用行号作为要匹配的字段(稍后我们将使用不同的字段)。

注意,这两个文件中有不同数量的字段,这很好,我们可以告诉join每个文件使用哪个字段。

但是,要注意像纽约地区这样的字段;在以空格分隔的文件中,地区名称中的每个单词看起来都像一个字段。因为有些区域有两个或三个单词的名称,所以在同一个文件中实际上有不同数量的字段。这是可以的,只要你匹配出现在纽约地区前一行的字段。

join命令

首先,必须对要匹配的字段进行排序。我们在两个文件中都有升序数字,所以我们符合这个标准。默认情况下,join使用文件中的第一个字段,这是我们想要的。另一个合理的默认值是join期望字段分隔符为空格。再说一遍,我们有了,所以我们可以继续,然后开火加入。

由于我们使用了所有的默认值,所以我们的命令很简单:

join file-1.txt file-2.txt

如何在linux上使用join命令

join根据文件在命令行中列出的顺序,将文件视为“文件一”和“文件二”。

输出如下:

1 Adore Varian [email protected] Female 192.57.150.231 Varian [email protected] Female Western New York $535,304.73 2 Nancee Merrell [email protected] Female 22.198.121.181 Merrell [email protected] Female Finger Lakes $309,033.10 3 Herta Friett [email protected] Female 33.167.32.89 Friett [email protected] Female Southern Tier $461,664.44 4 Torie Venmore [email protected] Female 251.9.204.115 Venmore [email protected] Female Central New York $175,818.02 5 Deni Sealeaf [email protected] Female 210.53.81.212 Sealeaf [email protected] Female North Country $126,690.15 6 Fidel Bezley [email protected] Male 72.173.218.75 Bezley [email protected] Male Mohawk Valley $366,733.78 7 Ulrikaumeko Standen [email protected] Female 4.204.0.237 Standen [email protected] Female Capital District $674,634.93 8 Odell Jursch [email protected] Male 1.138.85.117 Jursch [email protected] Male Hudson Valley $663,821.09

输出的格式如下:首先打印行匹配的字段,然后打印文件1中的其他字段,然后打印文件2中没有匹配字段的字段。

未排序字段

让我们试试我们知道行不通的东西。我们将把一个文件中的行按顺序排列,这样join将无**确处理该文件。file-3.txt的内容与file-2.txt相同,但第八行在第五行和第六行之间。

以下是file-3.txt的内容:

1 Varian [email protected] Female Western New York $535,304.73 2 Merrell [email protected] Female Finger Lakes $309,033.10 3 Friett [email protected] Female Southern Tier $461,664.44 4 Venmore [email protected] Female Central New York $175,818.02 5 Sealeaf [email protected] Female North Country $126,690.15 8 Jursch [email protected] Male Hudson Valley $663,821.09 6 Bezley [email protected] Male Mohawk Valley $366,733.78 7 Standen [email protected] Female Capital District $674,634.93

我们键入以下命令以尝试将file-3.txt连接到file-1.txt:

join file-1.txt file-3.txt

如何在linux上使用join命令

join报告文件-3.txt中的第七行出现故障,因此未对其进行处理。第七行是以数字6开头的,在正确排序的列表中,数字6应该在8之前。文件中的第六行(以“8 Odell”开头)是最后处理的一行,因此我们可以看到它的输出。

如果您想查看join是否符合文件的排序顺序,则可以使用--check order选项,而不会尝试合并。

为此,我们键入以下内容:

join --check-order file-1.txt file-3.txt

如何在linux上使用join命令

join提前告诉您file-3.txt文件的第七行有问题。

缺少行的文件

在file-4.txt中,最后一行已被删除,因此没有第八行。内容如下:

1 Varian [email protected] Female Western New York $535,304.73 2 Merrell [email protected] Female Finger Lakes $309,033.10 3 Friett [email protected] Female Southern Tier $461,664.44 4 Venmore [email protected] Female Central New York $175,818.02 5 Sealeaf [email protected] Female North Country $126,690.15 6 Bezley [email protected] Male Mohawk Valley $366,733.78 7 Standen [email protected] Female Capital District $674,634.93

我们键入以下内容,令人惊讶的是,join不会抱怨并处理它能处理的所有行:

join file-1.txt file-4.txt

如何在linux上使用join命令

输出列出了七条合并行。

-a(print unpairable)选项告诉join也打印无法匹配的行。

在这里,我们键入以下命令,告诉join打印文件1中与文件2中的行不匹配的行:

join -a 1 file-1.txt file-4.txt

如何在linux上使用join命令

七行匹配,文件一的第八行打印,不匹配。没有任何合并信息,因为file-4.txt不包含可以匹配的第8行。但是,至少它仍然出现在输出中,因此您知道它在file-4.txt中没有匹配项。

我们键入以下-v(抑制连接线)命令以显示不匹配的任何行:

join -v file-1.txt file-4.txt

如何在linux上使用join命令

我们看到第8行是文件2中唯一没有匹配项的。

匹配其他字段

让我们在一个非默认字段(字段一)上匹配两个新文件。文件-7.txt的内容如下:

[email protected] Female 192.57.150.231 [email protected] Female 210.53.81.212 [email protected] Male 72.173.218.75 [email protected] Female 33.167.32.89 [email protected] Female 22.198.121.181 [email protected] Male 1.138.85.117 [email protected] Female 251.9.204.115 [email protected] Female 4.204.0.237

文件-8.txt的内容如下:

Female [email protected] Western New York $535,304.73 Female [email protected] North Country $126,690.15 Male [email protected] Mohawk Valley $366,733.78 Female [email protected] Southern Tier $461,664.44 Female [email protected] Finger Lakes $309,033.10 Male [email protected] Hudson Valley $663,821.09 Female [email protected] Central New York $175,818.02 Female [email protected] Capital District $674,634.93

用于加入的唯一合理字段是email address,它是第一个文件中的字段1和第二个文件中的字段2。为了适应这种情况,我们可以使用-1(fileone字段)和-2(filetwo字段)选项。我们将用一个数字来表示每个文件中的哪个字段应该用于连接。

我们键入以下命令,告诉join使用文件1中的第一个字段和文件2中的第二个字段:

join -1 1 -2 2 file-7.txt file-8.txt

如何在linux上使用join命令

文件在电子邮件地址上合并,该地址显示为输出中每行的第一个字段。

使用不同的字段分隔符

如果文件中的字段不是用空格分隔的,会怎么样?

以下两个文件用逗号分隔,多个单词的地名之间只有空格:

cat file-5.txt cat file-6.txt

如何在linux上使用join命令

我们可以使用-t(分隔符)来告诉join哪个字符用作字段分隔符。在本例中,它是逗号,因此我们键入以下命令:

join -t, file-5.txt file-6.txt

如何在linux上使用join命令

所有的线都是匹配的,而空格则保留在地名中。

忽略字母大小写

另一个文件file-9.txt与file-8.txt几乎相同。唯一的区别是有些电子邮件地址有大写字母,如下所示:

Female [email protected] Western New York $535,304.73 Female [email protected] North Country $126,690.15 Male [email protected] Mohawk Valley $366,733.78 Female [email protected] Southern Tier $461,664.44 Female [email protected] Finger Lakes $309,033.10 Male [email protected] Hudson Valley $663,821.09 Female [email protected] Central New York $175,818.02 Female [email protected] Capital District $674,634.93

当我们加入file-7.txt和file-8.txt时,它运行得非常好。让我们看看file-7.txt和file-9.txt会发生什么。

我们键入以下命令:

join -1 1 -2 2 file-7.txt file-9.txt

如何在linux上使用join命令

我们只匹配了六行。大写字母和小写字母的差异阻止了其他两个电子邮件地址的连接。

但是,我们可以使用-i(忽略大小写)选项强制join忽略这些差异,并匹配包含相同文本的字段,而不考虑大小写。

我们键入以下命令:

join -1 1 -2 2 -i file-7.txt file-9.txt

如何在linux上使用join命令

所有八行匹配并连接成功。

混搭

在join中,当您在处理棘手的数据准备时,您有一个强大的盟友。可能您需要分析数据,或者您正试图将其转换为形状以执行到其他系统的导入。

不管情况如何,你都会很高兴加入你的行列!

  • 发表于 2021-04-02 15:30
  • 阅读 ( 144 )
  • 分类:互联网

你可能感兴趣的文章

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 303 )

如何在windows10上获得linux bash shell

... 如何在windows10上安装linux bash shell ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 282 )

如何在linux中添加用户

想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...

  • 发布于 2021-03-26 23:29
  • 阅读 ( 331 )

windows10的新bashshell所能做的一切

...些指南汇总到一个大列表中。 windows上linux入门 相关:如何在windows10上安装和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安装Linux环境和bashshell。但是,它确实需要64位版本的Windows10。您只需启用Windows Subs...

  • 发布于 2021-04-06 14:44
  • 阅读 ( 261 )

如何在windows10上安装和使用linux bash shell

...令行应用程序都能正常工作,因为这个特性并不完美。 如何在windows10上安**ash 相关:如何知道我运行的是32位还是64位Windows? 此功能在32位版本的Windows 10上不起作用,因此请确保您使用的是64位版本的Windows。无论如何,如果你...

  • 发布于 2021-04-06 16:32
  • 阅读 ( 243 )

如何在Windows10上设置默认的linux发行版

...个Linux环境,可以设置默认值并在它们之间切换。 相关:如何在windows10上安装和使用Linux Bash Shell 您可以自由地一次运行多个Linux环境,但是当您运行类似wsl.exe文件或者bash.exe启动shell,或者使用wsl[command]或bash-c[command]从Windows中...

  • 发布于 2021-04-06 16:40
  • 阅读 ( 195 )

linux初学者:不要害怕终端

...刚刚安装了Ubuntu,我们想安装Pidgin和Chromium。 下面是我们如何使用图形用户界面完成任务: 打开Ubuntu软件中心,在搜索框中键入Pidgin,单击pidgininternetmessenger,单击Install,然后输入密码。在搜索框中键入Chromium,单击Chromium Web浏...

  • 发布于 2021-04-09 03:15
  • 阅读 ( 182 )

如何在windows10上从bashshell外部运行linux命令

...境。还有一种方法可以在特定的Linux环境中运行命令。 如何在命令提示符或powershell中运行linux命令 相关:如何在windows10上安装和使用Linux Bash Shell 在执行这些操作之前,您需要安装并设置Windows10的bashshell。完成后,可以打开命...

  • 发布于 2021-04-09 11:07
  • 阅读 ( 202 )

如何检查linux中的交换空间(check swap space in linux)

方法1方法1/5:使用“swapon”命令 1按Ctrl+Alt+T打开终端。在大多数Linux发行版中,终端用于输入文本命令。按Ctrl+Alt+T打开终端。或者,你可以在大多数Linux发行版上打开终端,方法是打开“应用程序”菜单,然后单击类似于带...

  • 发布于 2022-03-14 01:22
  • 阅读 ( 118 )
yjltu789
yjltu789

0 篇文章

相关推荐