侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux sort命令用法详解:如何对文本文件进行各种排序操作?

Linux sort命令介绍

Linux sort命令是用于对文本文件的内容进行排序的工具。它可以按照不同的规则和选项来对文本行进行排序,从而提高可读性和便利性。sort命令的全称是sort lines of text files,意思是对文本文件的行进行排序。

sort命令可以用于以下场景:

  • 对文件或标准输入的内容进行字母或数字顺序的排序。
  • 对文件或标准输入的内容进行按月份、版本号、人类可读的数字等特殊方式的排序。
  • 对文件或标准输入的内容进行随机排序。
  • 对文件或标准输入的内容进行逆序排序。
  • 对文件或标准输入的内容进行按字段或列的排序。
  • 对文件或标准输入的内容进行去重或合并操作。
  • 检查文件或标准输入的内容是否已经按照顺序排序。

适用的Linux版本

sort命令是GNU coreutils包中的一个常用命令,它在大多数Linux发行版中都是默认安装的。你可以使用以下命令来检查你的Linux系统是否已经安装了sort命令:

[linux@bashcommandnotfound.cn ~]$ which sort

如果输出类似于/usr/bin/sort,则表示sort命令已经安装。如果没有输出,或者输出sort: command not found,则表示sort命令没有安装,你需要根据你的Linux发行版来安装它。

在CentOS 7和CentOS 8中,你可以使用以下命令来安装sort命令:

[linux@bashcommandnotfound.cn ~]$ sudo yum install coreutils

在Ubuntu和Debian中,你可以使用以下命令来安装sort命令:

[linux@bashcommandnotfound.cn ~]$ sudo apt-get install coreutils

Linux sort命令的基本语法

sort命令的基本语法如下:

[linux@bashcommandnotfound.cn ~]$ sort [options] [file...]

其中,options是可选的参数,用于指定排序的规则和选项;file...是可选的文件名,用于指定要排序的文件。如果没有指定文件名,则sort命令会从标准输入读取数据。

Linux sort命令的常用选项说明

sort命令支持很多选项,用于控制排序的方式和输出的格式。以下是一些常用选项的说明:

选项说明
-b忽略每行前面开始出的空格字符。
-c检查文件是否已经按照顺序排序。
-d排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f排序时,将小写字母视为大写字母。
-i排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m将几个排序好的文件进行合并。
-M将前面3个字母依照月份的缩写进行排序。
-n依照数值的大小排序。
-o<输出文件>将排序后的结果存入指定的文件。
-r以相反的顺序来排序。
-t<分隔字符>指定排序时所用的栏位分隔字符。
-u意味着是唯一的 (unique),输出的结果是去完重了的。
-k<起始栏位>-<结束栏位>以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

Linux sort命令实例

以下是一些使用sort命令进行排序操作的实例:

实例1:按照字母顺序排序

假设有一个文件names.txt,其内容如下:

[linux@bashcommandnotfound.cn ~]$ cat names.txt
Alice
Bob
Charlie
David
Eve
Frank

要按照字母顺序对文件进行排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort names.txt
Alice
Bob
Charlie
David
Eve
Frank

实例2:按照数字顺序排序

假设有一个文件numbers.txt,其内容如下:

[linux@bashcommandnotfound.cn ~]$ cat numbers.txt
10
5
100
50
1

要按照数字顺序对文件进行排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -n numbers.txt
1
5
10
50
100

注意,如果不使用-n选项,sort命令会按照字符串的顺序进行排序,即:

[linux@bashcommandnotfound.cn ~]$ sort numbers.txt
1
10
100
5
50

实例3:按照逆序排序

要按照逆序对文件进行排序,可以使用-r选项。例如,要按照字母逆序对文件names.txt进行排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -r names.txt
Frank
Eve
David
Charlie
Bob
Alice

要按照数字逆序对文件numbers.txt进行排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -nr numbers.txt 
100 
50 
10 
5 
1 

实例4:按照字段或列排序

sort命令可以使用-t选项来指定字段或列的分隔符,然后使用-k选项来指定要排序的字段或列的范围。例如,假设有一个文件scores.txt,其内容如下:

[linux@bashcommandnotfound.cn ~]$ cat scores.txt 
Alice:90:80:85 
Bob:95:75:80 
Charlie:85:95:90 
David:80:90:95 
Eve:75:85:75 
Frank:70:80:70 

每一行表示一个学生的姓名和三门课程的成绩,用冒号分隔。要按照第一门课程的成绩进行排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -t':' -k2 scores.txt 
Frank:70:80:70 
Eve:75:85:75 
David:80:90:95 
Charlie:85:95:90 
Alice:90:80:85 
Bob:95:75:80 

注意,如果不指定字段或列的结束位置,默认是到行尾。如果要指定字段或列的结束位置,可以在-k选项后加上一个逗号和结束位置。例如,要按照第二门课程的成绩进行排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -t':' -k3,3 scores.txt 
Bob:95:75:80 
Alice:90:80:85 
Frank:70:80:70 
Eve:75:85:75 
David:80:90:95 
Charlie:85:95:90 

如果要按照多个字段或列进行排序,可以在-k选项后加上多个范围。例如,要先按照第一门课程的成绩进行排序,再按照第二门课程的成绩进行排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -t':' -k2,2 -k3,3 scores.txt  
Frank:70:80:70  
Eve:75:85:75  
David:80:90:95  
Charlie:85:95:90  
Alice:90:80:85  
Bob :95 :75 :80  

实例5:按照月份排序

假设有一个文件months.txt,其内容如下:

[linux@bashcommandnotfound.cn ~]$ cat months.txt
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec

要按照月份的顺序对文件进行排序,可以使用-M选项。例如,要按照升序排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -M months.txt
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec

要按照降序排序,可以使用-r选项。例如,要按照降序排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -Mr months.txt 
Dec 
Nov 
Oct 
Sep 
Aug 
Jul 
Jun 
May 
Apr 
Mar 
Feb 
Jan 

实例5:按照月份排序

假设有一个文件months.txt,其内容如下:

[linux@bashcommandnotfound.cn ~]$ cat months.txt
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec

要按照月份的顺序对文件进行排序,可以使用-M选项。例如,使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -M months.txt
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec

注意,如果不使用-M选项,sort命令会按照字母的顺序进行排序,即:

[linux@bashcommandnotfound.cn ~]$ sort months.txt 
Apr 
Aug 
Dec 
Feb 
Jan 
Jul 
Jun 
Mar 
May 
Nov 
Oct 
Sep 

实例6:按照版本号排序

假设有一个文件versions.txt,其内容如下:

[linux@bashcommandnotfound.cn ~]$ cat versions.txt 
1.0.0 
1.0.1 
1.0.10 
1.0.2 
1.1.0 
1.2.0 
2.0.0 

要按照版本号的顺序对文件进行排序,可以使用-V选项。例如,使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -V versions.txt 
1.0.0 
1.0.1 
1.0.2 
1.0.10 
1.1.0 
1.2.0 
2.0.0 

注意,如果不使用-V选项,sort命令会按照字符串的顺序进行排序,即:

[linux@bashcommandnotfound.cn ~]$ sort versions.txt  
1.0.0  
1.0.1  
1.0.10  
1.0.2  
1.1.0  
1.2.0  
2 . 0 . 0  

实例7:按照人类可读的数字排序

假设有一个文件sizes.txt,其内容如下:

[linux@bashcommandnotfound.cn ~]$ cat sizes.txt  
10K  
5M  
100K  
50M  
1G  

要按照人类可读的数字的顺序对文件进行排序,可以使用-h选项。例如,使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -h sizes.txt  
10K  
100K  
5M  
50M  
1G  

注意,如果不使用-h选项,sort命令会按照字符串的顺序进行排序,即:

[linux@bashcommandnotfound.cn ~]$ sort sizes.txt  
10K  
100K  
1G  
50M  
5M  

实例8:随机排序

要对文件或标准输入的内容进行随机排序,可以使用-R选项。例如,要对文件names.txt进行随机排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -R names.txt  
Charlie  
Alice  
Frank  
Eve  
David  
Bob  

每次执行该命令,输出的结果可能都不一样。

实例9:去重或合并

sort命令可以使用-u选项来去除重复的行。例如,假设有一个文件colors.txt,其内容如下:

[linux@bashcommandnotfound.cn ~]$ cat colors.txt   
red   
blue   
green   
red   
yellow   
blue   

要去除重复的颜色,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -u colors.txt   
blue   
green   
red   
yellow   

sort命令也可以使用-m选项来合并多个已经排序好的文件。例如,假设有两个文件colors1.txtcolors2.txt,其内容分别如下:

[linux@bashcommandnotfound.cn ~]$ cat colors1.txt   
blue   
green   
red   
yellow   
[linux@bashcommandnotfound.cn ~]$ cat colors2.txt   
black   
cyan   
magenta   
white   

要合并这两个文件,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -m colors1.txt colors2.txt   
black   
blue   
cyan   
green   
magenta   
red   
white   
yellow   

实例10:检查是否已经排序

sort命令可以使用-c选项来检查文件或标准输入的内容是否已经按照顺序排序。如果已经排序,sort命令不会输出任何内容;如果没有排序,sort命令会输出第一个乱序的行。例如,要检查文件names.txt是否已经按照字母顺序排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -c names.txt  
sort: names.txt:3: disorder: Charlie  

这表示第三行的Charlie没有按照字母顺序排序。

要检查文件numbers.txt是否已经按照数字顺序排序,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sort -nc numbers.txt  
sort: numbers.txt:4: disorder: 5  

这表示第四行的5没有按照数字顺序排序。

Linux sort命令的注意事项

以下是一些使用sort命令时需要注意的事项:

  • sort命令默认是按照当前的区域设置(locale)来进行排序的,这可能会影响到不同语言或字符集的排序结果。如果要使用标准的ASCII字符集来进行排序,可以在执行sort命令之前设置环境变量LC_ALL=C
  • sort命令默认是将标准错误输出(stderr)重定向到标准输出(stdout)的,这可能会导致一些错误信息被混入到排序结果中。如果要避免这种情况,可以在执行sort命令时加上2>/dev/null来忽略错误信息。
  • sort命令默认是将排序结果输出到标准输出(stdout)的,如果要将排序结果保存到文件中,可以使用-o选项或者重定向符号>。例如,要将文件names.txt按照字母顺序排序后保存到文件sorted_names.txt中,可以使用以下两种方法之一:
[linux@bashcommandnotfound.cn ~]$ sort names.txt -o sorted_names.txt  
[linux@bashcommandnotfound.cn ~]$ sort names.txt > sorted_names.txt  
0

评论区