Contents

在Linux终端中对文件进行排序

1. 概述

对文本行进行排序是 Linux 中的一项常见任务。在本教程中,我们将学习使用sort命令在终端上对文件行进行排序的多种方法。

2. sort 命令介绍

sort 命令 可以帮助我们重新排列来自 标准输入  (stdin) 或文本文件的行。 ** sort命令  会将排序后的结果写入 标准输出  (stdout)。** 它在所有 Linux 发行版中都可用,因为它是 GNU coreutils  包的一部分。

使用sort命令的语法 很简单:

sort [OPTION]... [FILE]...

默认情况下,排序实用程序将按字母顺序对行进行sort

$ cat cities.txt
New York City
Paris
Beijing
Hamburg
Los Angeles
Amsterdam
$ sort cities.txt
Amsterdam
Beijing
Hamburg
Los Angeles
New York City
Paris

但是,如果我们传递不同的选项, sort 命令可以做更多的事情,比如按数字排序、倒序排序、按字段排序等等。

我们将通过一些示例来学习如何使用sort 命令以各种方式对文件进行排序。

3. 使用sort命令就地排序

当我们使用sort文件命令时,文件以排序的方式显示其内容。

它没有得到任何类型的输出,而是一个排序的文件。

让我们看看如何在终端中就地对文件进行排序。

3.1. 使用带sort的重定向进行排序

让我们看一下STDOUT,sort命令的标准输出流。此流的所有输出通常会发送到我们的终端窗口:

$ sort cities.txt
Amsterdam
Beijing
Hamburg
Los Angeles
NewYork City
Paris

我们可以*使用*>运算符将排序命令的输出定向到临时文件

$ sort cities.txt > cities_sorted.txt

然后,我们可以发出mv 命令将名称恢复为cities.txt

$ mv cities_sorted.txt cities.txt

此外,我们可以将这两行合并为一行:

$ sort cities.txt > cities_sorted.txt && mv cities_sorted.txt cities.txt

就是这样。

一个常见的错误是试图将输出重定向到同一个输入文件(如sort file > file)。这是行不通的,因为 shell——而不是sort 程序——正在进行重定向,并且输入文件(作为输出)将在排序程序 有机会读取它之前被擦除。

3.2. 使用sort选项排序

另一种方法是将*-o FILE* 选项传递给 sort命令以将结果写入文件而不是stdout

$ sort -o cities.txt cities.txt

这会用同一文件的排序内容覆盖输入文件cities.txt 。用于指定输出的-o标志由 POSIX 定义 ,因此它应该适用于所有版本的sort

指定的输出文件可以与其中一个输入文件相同。就功能而言,它就像将输出重定向到一个文件。

我们还可以通过bash 大括号扩展 来避免重复文件名:

$ sort -o cities{,}

3.3. 使用命令替换排序

如前所述,我们不能直接将输出重定向回输入文件。但是,我们可以先评估sort命令,然后将其重定向回原始文件。这样,我们就可以实现就地排序:

$ echo "$(sort cities.txt)" > cities.txt