如果要通过匹配公共字段来合并两个文本文件中的数据,可以使用Linux join命令。它为静态数据文件添加了些许活力。我们会教你怎么使用它。
数据为王。公司、企业和家庭都在这上面经营。但是数据存储在不同的文件中,由不同的人整理,这是一种痛苦。除了知道要打开哪些文件来查找所需的信息外,文件的布局和格式可能会有所不同。
您还必须处理管理方面的难题,即哪些文件需要更新,哪些需要备份,哪些是遗留文件,哪些可以存档。
另外,如果您需要整合数据或跨整个数据集进行一些分析,您还有一个问题。在处理不同文件的数据之前,如何使其合理化?如何进入数据准备阶段?
好消息是,如果这些文件至少共享一个公共数据元素,那么linuxjoin命令可以让您摆脱困境。
我们将用于演示join命令使用的所有数据都是虚构的,从以下两个文件开始:
cat file-1.txt cat file-2.txt以下是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我们有一组编号的行,每行包含以下所有信息:
以下是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.09file-2.txt中的每一行都包含以下信息:
join命令与“fields”一起使用,在本文中,fields表示由空格、行的开始或行的结束包围的文本部分。为了使join匹配两个文件之间的行,每行必须包含一个公共字段。
因此,只有在两个文件中都显示字段时,才能匹配该字段。IP地址只出现在一个文件中,所以这不好。第一个名称只出现在一个文件中,因此我们也不能使用它。姓氏在两个档案中,但这是一个很差的选择,因为不同的人有相同的姓氏。
你也不能将数据与**和**条目联系在一起,因为它们太模糊了。纽约地区和美元值也只出现在一个文件中。
但是,我们可以使用电子邮件地址,因为它在两个文件中都存在,并且每个文件对一个人都是唯一的。快速浏览文件还可以确认每个文件中的行对应于同一个人,因此我们可以使用行号作为要匹配的字段(稍后我们将使用不同的字段)。
注意,这两个文件中有不同数量的字段,这很好,我们可以告诉join每个文件使用哪个字段。
但是,要注意像纽约地区这样的字段;在以空格分隔的文件中,地区名称中的每个单词看起来都像一个字段。因为有些区域有两个或三个单词的名称,所以在同一个文件中实际上有不同数量的字段。这是可以的,只要你匹配出现在纽约地区前一行的字段。
首先,必须对要匹配的字段进行排序。我们在两个文件中都有升序数字,所以我们符合这个标准。默认情况下,join使用文件中的第一个字段,这是我们想要的。另一个合理的默认值是join期望字段分隔符为空格。再说一遍,我们有了,所以我们可以继续,然后开火加入。
由于我们使用了所有的默认值,所以我们的命令很简单:
join file-1.txt file-2.txtjoin根据文件在命令行中列出的顺序,将文件视为“文件一”和“文件二”。
输出如下:
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.txtjoin报告文件-3.txt中的第七行出现故障,因此未对其进行处理。第七行是以数字6开头的,在正确排序的列表中,数字6应该在8之前。文件中的第六行(以“8 Odell”开头)是最后处理的一行,因此我们可以看到它的输出。
如果您想查看join是否符合文件的排序顺序,则可以使用--check order选项,而不会尝试合并。
为此,我们键入以下内容:
join --check-order file-1.txt file-3.txtjoin提前告诉您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输出列出了七条合并行。
-a(print unpairable)选项告诉join也打印无法匹配的行。
在这里,我们键入以下命令,告诉join打印文件1中与文件2中的行不匹配的行:
join -a 1 file-1.txt file-4.txt七行匹配,文件一的第八行打印,不匹配。没有任何合并信息,因为file-4.txt不包含可以匹配的第8行。但是,至少它仍然出现在输出中,因此您知道它在file-4.txt中没有匹配项。
我们键入以下-v(抑制连接线)命令以显示不匹配的任何行:
join -v file-1.txt file-4.txt我们看到第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文件在电子邮件地址上合并,该地址显示为输出中每行的第一个字段。
如果文件中的字段不是用空格分隔的,会怎么样?
以下两个文件用逗号分隔,多个单词的地名之间只有空格:
cat file-5.txt cat file-6.txt我们可以使用-t(分隔符)来告诉join哪个字符用作字段分隔符。在本例中,它是逗号,因此我们键入以下命令:
join -t, file-5.txt file-6.txt所有的线都是匹配的,而空格则保留在地名中。
另一个文件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我们只匹配了六行。大写字母和小写字母的差异阻止了其他两个电子邮件地址的连接。
但是,我们可以使用-i(忽略大小写)选项强制join忽略这些差异,并匹配包含相同文本的字段,而不考虑大小写。
我们键入以下命令:
join -1 1 -2 2 -i file-7.txt file-9.txt所有八行匹配并连接成功。
在join中,当您在处理棘手的数据准备时,您有一个强大的盟友。可能您需要分析数据,或者您正试图将其转换为形状以执行到其他系统的导入。
不管情况如何,你都会很高兴加入你的行列!
... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...
... 如何在windows10上安装linux bash shell ...
想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...
...些指南汇总到一个大列表中。 windows上linux入门 相关:如何在windows10上安装和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安装Linux环境和bashshell。但是,它确实需要64位版本的Windows10。您只需启用Windows Subs...
...令行应用程序都能正常工作,因为这个特性并不完美。 如何在windows10上安**ash 相关:如何知道我运行的是32位还是64位Windows? 此功能在32位版本的Windows 10上不起作用,因此请确保您使用的是64位版本的Windows。无论如何,如果你...
...个Linux环境,可以设置默认值并在它们之间切换。 相关:如何在windows10上安装和使用Linux Bash Shell 您可以自由地一次运行多个Linux环境,但是当您运行类似wsl.exe文件或者bash.exe启动shell,或者使用wsl[command]或bash-c[command]从Windows中...
...刚刚安装了Ubuntu,我们想安装Pidgin和Chromium。 下面是我们如何使用图形用户界面完成任务: 打开Ubuntu软件中心,在搜索框中键入Pidgin,单击pidgininternetmessenger,单击Install,然后输入密码。在搜索框中键入Chromium,单击Chromium Web浏...
...境。还有一种方法可以在特定的Linux环境中运行命令。 如何在命令提示符或powershell中运行linux命令 相关:如何在windows10上安装和使用Linux Bash Shell 在执行这些操作之前,您需要安装并设置Windows10的bashshell。完成后,可以打开命...
方法1方法1/5:使用“swapon”命令 1按Ctrl+Alt+T打开终端。在大多数Linux发行版中,终端用于输入文本命令。按Ctrl+Alt+T打开终端。或者,你可以在大多数Linux发行版上打开终端,方法是打开“应用程序”菜单,然后单击类似于带...