在Linux上合并和排序文件

Metamorworks / Getty Images

有许多方法来合并和文本文件在Linux上,但如何取决于你想完成——你是否只是想把多个文件到一个大文件的内容,或组织以某种方式,使它更容易使用。在这篇文章中,我们将研究一些排序和合并文件内容的命令,并关注结果的不同。

使用猫

如果您所要做的只是将一组文件合并到一个文件中,则command是一个简单的选择。您所要做的就是键入“cat”,然后在命令行上按您希望合并文件中包含这些文件的顺序列出这些文件。将该命令的输出重定向到要创建的文件。如果指定名称的文件已经存在,则它将被您正在创建的文件覆盖。例如:

$ cat firstfile第二文件第三文件>新文件

如果您希望将一系列文件的内容添加到现有文件中,而不是覆盖它,只需更改>>>

$ cat firstfile secondfile thirdfile >> updated_file

如果您要合并的文件遵循一些方便的命名约定,则任务可以更简单。如果可以使用正则表达式指定文件名,则不必包含所有文件名。例如,如果所有的文件都以“file”结尾,就像上面的例子一样,你可以这样做:

$ cat *文件>所有文件

注意,上面显示的命令将以字母数字顺序添加文件内容。在Linux上,一个名为“filea”的文件会被添加到一个名为“filea”的文件之前,但是会被添加到一个名为“file7”的文件之后。毕竟,在处理字母数字序列时,我们不需要只考虑“ABCDE”;我们必须考虑"0123456789aAbBcCdDeE"。你总是可以使用像“ls *file”这样的命令来查看在合并文件之前添加文件的顺序。

注意:首先,最好确保你的命令包含了合并文件中所有你想要的文件,而不是其他文件——尤其是当你使用通配符“*”时。并且不要忘记合并的文件仍然作为单独的文件存在,一旦合并被验证,您可能想要删除这些文件。

按年龄合并文件

如果你想根据文件的年龄而不是文件名来合并你的文件,可以使用如下命令:

$ for file in ' ls -tr myfile.* '中的文件;do cat $file >> BigFile.$$;完成

使用tr选项(t=,r=反向)将导致以最老-年龄优先顺序排列的文件列表。这可能很有用,例如,如果您要保存某些活动的日志,并希望按照活动的执行顺序添加内容。

$$在上面的命令中,表示运行该命令时的进程ID。这是完全没有必要使用的,但它使您几乎不可能无意中添加到现有文件的末尾而不是创建一个新文件。如果使用$$,生成的文件可能如下所示:

$ ls -l BigFile。* -rw-rw-r- 1 justme justme 931725 Aug 6 12:36 BigFile.582914

合并和排序文件

Linux提供了一些有趣的方法来在合并之前或之后对文件内容进行排序。

按字母顺序排序的内容

如果你想对合并后的文件内容进行排序,你可以用如下命令对整体内容进行排序:

猫myfile美元。1 myfile。2 myfile。排序>新文件

如果你想把内容按文件分组,在把每个文件添加到新文件之前,用如下命令进行排序:

$ for file in ' ls myfile.? ';执行排序$file >> newfile;完成

排序文件数值

若要对文件内容进行数字排序,请使用- n选择与排序。此选项仅在文件中的行以数字开头时才有用。请记住,在默认的顺序中,“02”将被认为小于“1”。使用- n选项,以确保行按数字顺序排序。

猫myfile美元。1 myfile。2 myfile。排序-n > xyz

- n选项还允许您按日期对文件内容进行排序,如果文件中的行以日期开头,格式类似于“2020-11-03”或“2020/11/03”(年、月、日格式)。以其他格式对日期进行排序将会很棘手,并且需要更复杂的命令。

使用粘贴

粘贴命令允许您逐行加入文件的内容。当您使用此命令时,合并文件的第一行将包含每个合并文件的第一行。这里有一个例子,我已经使用了大写字母,以便更容易看到这些线的来源:

美元猫文件。一个,一个,两个,三个$粘贴文件。一个文件。b文件。C一b一C一A二b二C二A三C三C你b四C四C五

将输出重定向到另一个文件保存:

美元粘贴文件。一个文件。b file.c >合并内容

另外,还可以将文件粘贴在一起,以便将每个文件的内容连接到一行中。这需要使用- s(顺序)选项。注意这次的输出是如何显示每个文件的内容的:

$粘贴-s文件。一个文件。b文件。C一A二A三b一b二b三b四C一C二C你C四C五

使用连接

用于合并文件的另一个命令是加入。的加入命令允许您基于一个公共字段合并多个文件的内容。例如,您可能有一个文件包含一组同事的电话号码,另一个文件包含他们的个人电子邮件地址,它们都是按个人姓名列出的。您可以使用join创建包含电话号码和电子邮件地址的文件。

一个重要的限制是,文件必须以相同的顺序列出它们的行,并在每个文件中包含join字段。

下面是一个命令示例:

$ join phone_numbers email_address Sandra 555-456-1234 bugfarm@gmail.com Pedro 555-540-5405 John 555-333-1234 john_doe@gmail.com Nemo 555-123-4567 cutie@fish.com

在本例中,即使缺少其他信息或命令失败并出现错误,也必须在每个文件中存在第一个字段(名字)。对内容进行排序很有帮助,而且可能更容易管理,但只要顺序一致就不是必需的。

总结

在Linux上有很多选项可以合并和排序存储在单独文件中的数据。这些选择可以让一些原本单调乏味的任务变得出奇的简单。

加入网络世界社区足球竞猜app软件脸谱网LinkedIn对最重要的话题发表评论。
相关:

版权©2020足球竞彩网下载

工资调查:结果在