文件排序

时间:2019-04-29 03:17:27  来源:igfitidea点击:

如何使用sort命令对文件进行排序

Linux Sort命令示例

Linux中的sort命令允许您将文件或标准输入逐行排序为特定条件。以其最简单的形式,您可以按字母顺序或数字顺序进行排序。但是,通过向命令添加各种参数,您可以轻松定制排序结果。

排序数字

number.txt文件的内容如下:

john@john-desktop:~/test_examples$ cat numbers.txt
2
8
6
4
1
9
3
5
7
john@john-desktop:~/test_examples$ sort numbers.txt
 
1
2
3
4
5
6
7
8
9

Linux如何逆序排序

john@john-desktop:~/test_examples$ sort -r numbers.txt
9
8
7
6
5
4
3
2
1

如果您有类似1、10、100、2、20、200的数字。当对它们进行默认排序时,您会看到数字10和100出现在数字2和3 ....之前。

john@john-desktop:~/test_examples$ cat numbers2.txt
2
1
10
200
20
100
300
3
30
john@john-desktop:~/test_examples$ sort numbers2.txt
1
10
100
2
20
200
3
30
300

为了解决这个问题,我们可以执行-n参数。这指定我们要对数字进行数字排序:

john@john-desktop:~/test_examples$ cat numbers2.txt
2
1
10
200
20
100
300
3
30
john@john-desktop:~/test_examples$ sort -n numbers2.txt
1
2
3
10
20
30
100
200
300

Linux如何按字母排序文件

默认情况下,sort将按字母顺序对文件进行排序:

john@john-desktop:~/test_examples$ cat text1.txt
beautiful
decoration
colour
a
john@john-desktop:~/test_examples$ sort text1.txt
a
beautiful
colour
decoration

检查文件是否已排序

通过将-c参数传递给sort命令,我们可以快速判断文件是否正确。

john@john-desktop:~/test_examples$ cat sorted.txt
Ape
Bird
Cat
Dog
Elephant
Fox
Horse
john@john-desktop:~/test_examples$ cat unsorted.txt
Horse
Elephant
Dog
Ape
Cat
Bird
Fox
john@john-desktop:~/test_examples$ sort -c unsorted.txt
sort: unsorted.txt:2: disorder: Elephant
john@john-desktop:~/test_examples$ sort -c sorted.txt
john@john-desktop:~/test_examples$ 

在上面的示例中,我们可以看到单词disorder。这表明它未按顺序排序。

同时排序多个文件的内容

john@john-desktop:~/test_examples$ cat file1.txt
America
Canada
Japan
England
Wales
Germany
Scotland
Ireland
john@john-desktop:~/test_examples$ cat file2.txt
Spain
France
Holland
Russia
Turkey
Australia
john@john-desktop:~/test_examples$ sort file1.txt file2.txt
America
Australia
Canada
England
France
Germany
Holland
Ireland
Japan
Russia
Scotland
Spain
Turkey
Wales

排序具有多个字段的文件

到目前为止,我们已经看到了一些简单的示例,这些示例针对的是每行包含一个单词或一个数字的文件。

在大多数情况下,文件将在同一行上包含多个条目。sort命令可以轻松地对字段进行排序。

让我们看一些示例:

对文件的基本排序

john@john-desktop:~/test_examples$ cat multifile1.txt
John,21
Jessie,8
Fred,2
Maria,34
Paul,19
john@john-desktop:~/test_examples$ sort multifile1.txt
Fred,2
Jessie,8
John,21
Maria,34
Paul,19

正如我们在上面的示例中看到的,此处的标准排序已按第一个字段对输出进行了排序。

按字段排序

在下一个示例中,我们将指定一个定界符作为排序依据。在我们的示例文件中,字段用,分隔。定界符的参数是-t。参数-k用于指定key。语法为-kx,y,其中x为起始位置,y为结束键。默认情况下,如果未指定y,则将其设置为行尾

john@john-desktop:~/test_examples$ cat multifile1.txt
John,21
Jessie,8
Fred,2
Maria,34
Paul,19
john@john-desktop:~/test_examples$ sort multifile1.txt
Fred,2
Jessie,8
John,21
Maria,34
Paul,19
john@john-desktop:~/test_examples$ sort -t"," -k2n,2 multifile1.txt
Fred,2
Jessie,8
Paul,19
John,21
Maria,34

以相反的数字顺序对第二个字段中的文件进行排序:

john@john-desktop:~/test_examples$ sort -t"," -k2nr,2 multifile1.txt
Maria,34
John,21
Paul,19
Jessie,8
Fred,2

将在第一个字段上按字母顺序排序,然后在第二个字段上按数字顺序排序:

john@john-desktop:~/test_examples$ cat multifile2.txt
file1,1
file1,9
file2,1
file2,8
file2,4
file1,3
file1,2
file2,3
john@john-desktop:~/test_examples$ sort -t"," -k1,1 -k2n,2 multifile2.txt
file1,1
file1,2
file1,3
file1,9
file2,1
file2,3
file2,4
file2,8
john@john-desktop:~/test_examples$ cat multifile6.txt
192.168.0.1
127.0.0.10
127.0.0.1
127.0.0.2
192.168.0.100
192.168.0.2
john@john-desktop:~/test_examples$ sort -t"." -k2,2n -k4,4n multifile6.txt
127.0.0.1
127.0.0.2
127.0.0.10
192.168.0.1
192.168.0.2
192.168.0.100

使用sort删除重复的条目

要删除重复的条目,我们可以指定参数-u:

john@john-desktop:~/test_examples$ sort multifile4.txt
AIX
AIX
AS400
Linux
Linux
Puppy
Solaris
Solaris
VMS
Windows
Windows
Zos
Zos
john@john-desktop:~/test_examples$ sort -u multifile4.txt
AIX
AS400
Linux
Puppy
Solaris
VMS
Windows
Zos