在Linux上有很多方法可以合并和排序文本,但是你如何去做取决于你想做什么:你只是想把多个文件的内容放到一个文件中吗?,或以某种方式组织它以使其更易于使用。在本文中,我们将了解一些用于排序和合并文件内容的命令,并重点介绍结果的不同之处。使用cat如果您只想将一组文件放入一个文件中,cat命令是一个简单的选择。您所要做的就是键入cat,然后按照您希望它们在合并文件中的顺序在命令行中列出文件。将命令的输出重定向到要创建的文件。如果具有指定名称的文件已经存在,则该文件将被覆盖。例如:$catfirstfilesecondfilethirdfile>newfile如果要将一系列文件的内容添加到现有文件中,而不是覆盖它,只需将>更改为>>。$catfirstfilesecondfilethirdfile>>updated_file如果您要合并的文件遵循一些方便的命名约定,任务可能会更简单。如果可以使用正则表达式指定所有文件名,则无需列出所有文件。例如,如果文件都以file结尾,如上图,你可以这样做:$cat*file>allfiles注意,上面的命令会按照字母数字顺序添加文件内容。在Linux上,名为filea的文件将排在名为fileA的文件之前,但排在file7之后。毕竟,当我们处理字母数字序列时,我们不仅需要考虑ABCDE,还需要考虑0123456789aAbBcCdDeE。您可以使用ls*file之类的命令查看文件合并前的顺序。注意:首先确保您的命令包含合并文件中所需的所有文件,而不是其他文件,特别是如果您使用*.不要忘记用于合并的文件仍将单独存在,您可能希望在确认合并后删除它们。按年龄合并文件如果你想根据每个文件的年龄而不是文件名合并文件,使用这个命令:$forfilein`ls-trmyfile.*`;做cat$file>>BigFile.$$;done使用-tr选项(t=time,r=reverse)将生成一个文件列表,按最旧的顺序排序。这很有用,例如,如果您正在记录某些活动并希望按照活动执行的顺序添加内容。上面命令中的$$表示运行命令时的进程号。确实没有必要使用此功能,但几乎不可能无意中添加到现有文件而不是创建新文件。如果使用$$,生成的文件可能如下所示:$ls-lBigFile.*-rw-rw-r--1justmejustme931725Aug612:36BigFile.582914合并和排序文件Linux提供了一些有趣的在合并之前或之后对文件的内容进行排序。按字母顺序对内容进行排序如果要对合并后的文件内容进行排序,那么可以使用以下命令对整体内容进行排序:$catmyfile.1myfile.2myfile.3|sort>newfile如果要按文件对内容进行分组,请在将每个文件添加到新文件之前使用以下命令对其进行排序:$forfilein`lsmyfile.?`;对$file>>newfile进行排序;done按数字排序文件按数字排序文件内容按数字排序,使用sort中的-n选项。此选项仅在文件中的行以数字开头时才有用。请记住,默认顺序中02将小于1。如果要确保行按数字排序,请使用-n选项。$catmyfile.1myfile.2myfile.3|sort-n>xyz如果文件中的行以日期格式开头,例如2020-11-03或2020/11/03(年-月-日格式),-n选项还允许您按日期对内容进行排序.以其他格式对日期进行排序会很棘手,并且需要更复杂的命令。使用pastepaste命令允许您逐行连接文件内容。使用此命令时,合并文件的第一行将包含要合并的每个文件的第一行。这是一个示例,其中我将字母大写以便更容易看到行的来源:$catfile.aAoneAtwoAthree$pastefile.afile.bfile.cAoneBoneConeAtwoBtwoCtwoA三B三CtheeB四C四C五将输出重定向到另一个文件以保存它:$pastefile.afile.bfile.c>merged_content或者,您可以将每个文件的内容合并到同一行,然后把文件粘贴在一起。这需要使用-s(序列)选项。注意这次的输出是如何显示每个文件的内容的:$paste-sfile.afile.bfile.cAoneAtwoAthreeBoneBtwoBthreeBfourConeCtwoCtheeCfourCfivemergedusingjoin文件的另一个命令是加入。join命令允许您根据公共字段组合多个文件的内容。例如,您可能有一个文件包含一组同事的电话号码,而另一个文件包含同事的电子邮件地址,并且都按个人姓名列出。您可以使用join创建包含电话和电子邮件地址的文件。一个重要的限制是文件的行必须以相同的顺序排列,并且在每个文件中包含用于连接的字段。这是一个示例命令:$joinphone_numbersemail_addressesSandra555-456-1234bugfarm@gmail.comPedro555-540-5405John555-333-1234john_doe@gmail.comNemo555-123-4567cutie@fish.com在这个例子中,甚至如果缺少附加信息,第一个字段(名称)必须出现在每个文件中,否则命令将失败并出现错误。对内容进行排序会有所帮助,而且可能更易于管理,但只要顺序一致,就不必如此。总结在Linux上,您可以通过多种方式组合和排序存储在单独文件中的数据。这些方法可以使原本乏味的任务变得异常简单。
