有时,您可能希望以两种文件的形式组合,使输出更有意义。 例如,可能有一个包含大陆名称的文件,另一个文件包含位于这些大陆的国家/地区的名称,并且要求是将两个文件以大陆和相应国家出现在同一行中的方式组合。
这只是一个例子 - 可能有数百个这样的用例。 如果您在Linux上,并且正在寻找一个可以帮助您处理这些情况的工具,则可能需要查看join (命令行实用程序)。 在本教程中,我们将使用一些易于理解的示例来讨论此命令。
请注意,本文中提到的所有示例已在Ubuntu 16.04上进行了测试,我们使用的join命令版本为8.25。
Linux加入命令
join命令允许您在公共字段上组合两个文件的行。
join [OPTION]... FILE1 FILE2
这是手册页面关于这个工具的说明:
For each pair of input lines with identical join fields, write a line to standard output. The default
join field is the first, delimited by blanks. When FILE1 or FILE2 (not both) is -, read standard input.
以下示例应该让您了解join命令的工作原理。
1.如何使用join命令组合文件行?
我们来了解join命令的基本用法。 假设有两个文件(file1和file2)包含以下行:
1. Asia:
2. Africa:
3. Europe:
4. North America:
和
1. India
2. Nigeria
3. The Netherlands
4. The US
现在,您可以通过以下方式组合这两个文件:
join file1 file2
以下是我们上述命令的输出:
2.如何使加盟打印不兼容的行?
默认情况下,join命令仅打印可配对的行。 例如,即使file1包含一个额外的字段(行号5):
1. Asia:
2. Africa:
3. Europe:
4. North America:
5. South America:
加入file1和file2将不会产生任何不同的输出:
这是因为输出中不排除线路。 但是,如果需要,您仍然可以使用-a命令行选项在输出中使用它们。 此选项要求您传递文件编号,以便该工具知道您正在谈论哪个文件。
例如,在我们的例子中,命令将是:
join file1 file2 -a 1
因此,您可以看到文件编号1(在我们的例子中为file1)的不成对的行也显示在输出中。
请注意,如果您只想打印不成对的行(意思是抑制输出中的配对行),则可以使用-v命令行选项来执行此操作。 这个选项工作正常。
以下是-v选项的示例:
3.如何提供定制连接字段?
我们已经知道,加入在一个公共字段中组合文件行,默认情况下是第一个字段。 但是,如果需要,可以为每个文件指定一个不同的字段。 例如,分别在file1和file2中考虑以下内容。
* 1. Asia:
& 2. Africa:
@ 3. Europe:
# 4. North America:
# 1. India
@ 2. Nigeria
& 3. The Netherlands
* 4. The US
现在,如果要让每一行的第二个字段成为连接的通用字段,可以使用-1和-2命令行选项来告诉工具。 而前者代表第一个文件,后者指的是第二个文件。 这些选项需要一个引用相应文件的加入字段的数字参数。
例如,在我们的例子中,命令将是:
join -1 2 -2 2 file1 file2
这是这个命令的输出:
请注意,在两个文件中的公共字段的位置相同的情况下(如我们刚刚讨论的示例,它在哪里2),您可以将命令中的部分-1 [field] -2 [field]替换为-j [字段] 。 所以在我们的情况下,命令将成为:
join -j2 file1 file2
4.如何使加入操作不区分大小写?
默认情况下,join命令操作区分大小写。 例如,考虑以下文件:
文件1
A. Asia:
B. Africa:
C. Europe:
D. North America:
文件2
a. India
b. Nigeria
c. The Netherlands
d. The US
现在,如果你尝试加入这两个文件,使用默认(第一个)公共字段,什么都不会发生。 这是因为两个文件中的字段元素的情况是不同的。 要使加入忽略此问题,请使用-i命令行选项。
这是我们的命令:
join -i file1 file2
以下屏幕截图显示了正在执行的命令:
5.如何使加入不检查排序输入?
默认情况下,join命令检查提供的输入是否被排序,如果没有报告。 例如,当file1中的信息未排序时,请考虑以下输出:
现在,如果你想要这个错误/警告消失,你可以使用--nocheck-order选项。 这是同样的命令,但启用此选项:
所以你可以看到join命令当时没有检查排序的输入。
结论
加入可能不是一个非常直接的工具来理解,但一旦习惯了,它可能在某些情况下为您节省大量时间。 我们已经在这里覆盖了大部分的命令行选项。 尝试这些,一旦完成,通过命令的手册页其余。