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.txt
和colors2.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
评论区