1.命令作用
将所有文件内容排序(默认升序)写入标准输出(Write sorted concatenation of all FILE(s) to standard output)
说明:sort实质是通过文件内容的字典顺序排序,字典排序是一种最直观的排序方法,按照字母表的顺序逐位比较字母的大小来进行排序
2.命令语法
Usage: sort [OPTION]... [FILE]...
or: sort [OPTION]... --files0-from=F
3.参数详解
ORDERING OPTION:
- -b, --ignore-leading-blanks,忽略行首的空白字符(默认参数)
- -d, --dictionary-order,仅考虑空格和字母数字字符,不考虑特殊字符
- -f, --ignore-case,将小写字母转换为大写字母(相同字母大小写反向排序)
- -g, --general-numeric-sort,按照一般数值进行排序(添加-g参数后2排在10前,且支持科学计数法)
- -i, --ignore-nonprinting,只考虑可打印的字符
- -M, --month-sort,按"非月份<1月JAN< ... < 12月DEC"进行比较排序
- -h, --human-numeric-sort,按人类可读的数值比较排序(如2K、1G之间的比较)
- -n, --numeric-sort,根据字符数值进行比较(与-g参数类似,但不支持科学计数法,把数值当成字符串处理)
- -R, --random-sort,按行的随机哈希值排序,即每个行的哈希值对其进行随机排序,用于用于打乱数据的顺序,避免数据倾斜,相同内容,多次执行排序输出是不同的
- --random-source=FILE,从FILE中获取随机字节,与-R参数一起使用,指定一个文件作为哈希随机数生成源,如sort -R --random-source=file2.txt file3.txt
- -r, --reverse,反转比较的结果(反向排序)
- --sort=WORD,按WORD排序,(WORD包括general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V)
- -V, --version-sort,文本中自然排序(按照版本号的顺序进行排序),如Char2排在Char10前
OTHER OPTIONS:
- --batch-size=NMERGE,一次最多合并 NMERGE 个输入项,操过部分使用临时文件
- -c, --check, --check=diagnose-first,检查输入是否已排序;不会执行排序,如果文件已经排序,输出为空,如果文件没有排序,输出首个未排序的行
- -C, --check=quiet, --check=silent,类似于-c,但不报告第一行错误
- --compress-program=PROG,使用 PROG 压缩临时数据;使用 PROG -d 对其解压缩,大数据量时,使用压缩程序可以显著减少磁盘I/O操作,提高排序效率
- --debug,注释行中用于排序的部分,并警告有问题的stderr用法
- --files0-from=F,F代表一个文件名,文件名内容为多个文件的名称,用于对多个文件内容进行排序,多个文件以一个零字节(ASCII NUL)结束;当使用 - 时,以其他输出为输入,如find使用-print0参数(参考wc对应--files0-from=F参数的使用)
- -k, --key=KEYDEF,与-t参数一起使用,按一个key排序;KEYDEF给出位置和类型
- -m, --merge,合并已经排序的文件;不要排序
- -o, --output=FILE,将结果写入FILE而不是标准输出
- -s, --stable,通过稳定排序来比较排序,某特定场景下,稳定排序可能比快速排序更合适,且在大数据量下,稳定的排序算法会保持相等元素的相对顺序不变
- -S, --buffer-size=SIZE,使用SIZE作为主存缓冲区,可以优化排序操作的性能,尤其是在处理大量数据时,合理分配内存可以显著提高排序效率
- -t, --field-separator=SEP,使用SEP作为列的分割符,与-k参数一起使用
- -T, --temporary-directory=DIR,使用DIR临时目录,而不是$TMPDIR或/tmp;多个选项指定多个目录
- --parallel=N,将并发运行的排序数更改为N,提高排序效率
- -u, --unique,与-c使用,检查是否严格排序;若不与-c使用,输出排序后去重的结果
- -z, --zero-terminated,设置行终止为0字节(ASCII NUL)结束,而不是换行符,输出并不实际排序
4.常用用例
4.1.默认排序顺序
[root@node2 Desktop]# cat file1.txt
2
4
6
7
#
y
a
B
c
A
$
8
&
C
[root@node2 Desktop]# sort file1.txt
$
&
#
2
4
6
7
8
a
A
B
c
C
y
[root@node2 Desktop]#
排序说明:字典排序,测试版本时按照特殊字符、数字、字母(相同字母小写在前)进行排序
4.2.排序规则
[root@node2 Desktop]# cat file2.txt
aao:20:1.1
cdc:30:3.3
ddd:40:7.7
cab:10:2.2
eee:90:5.5
eae:50:5.5
aad:80:4.4
[root@node2 Desktop]# sort file2.txt
aad:80:4.4
aao:20:1.1
cab:10:2.2
cdc:30:3.3
ddd:40:7.7
eae:50:5.5
eee:90:5.5
[root@node2 Desktop]#
排序规则说明:第一列相同时,对比第二列,第二列相同时,对比第三列,依此类推
4.3.倒叙排序(-r)
[root@node2 Desktop]# sort file2.txt
aad:80:4.4
aao:20:1.1
cab:10:2.2
cdc:30:3.3
ddd:40:7.7
eae:50:5.5
eee:90:5.5
[root@node2 Desktop]# sort -r file2.txt
eee:90:5.5
eae:50:5.5
ddd:40:7.7
cdc:30:3.3
cab:10:2.2
aao:20:1.1
aad:80:4.4
[root@node2 Desktop]#
排序说明:与默认的排序输出相反
4.4.以分隔符分隔指定列进行对比排序(-t,-k)
[root@node2 Desktop]# cat file2.txt
aao:20:1.1
cdc:30:3.3
ddd:40:7.7
cab:10:2.2
eee:90:5.5
eae:50:5.5
aad:80:4.4
[root@node2 Desktop]# sort -t : -k 2 file2.txt
cab:10:2.2
aao:20:1.1
cdc:30:3.3
ddd:40:7.7
eae:50:5.5
aad:80:4.4
eee:90:5.5
[root@node2 Desktop]#
排序说明:以冒号(:)分隔,可分为3列,取第二列值进行排序输出
4.5.排序去重输出
[root@node2 Desktop]# cat file3.txt
aaaa
dddd
cccc
bbbb
bbbb
bbbb
aaaa
iiii
kkkk
[root@node2 Desktop]# sort file3.txt
aaaa
aaaa
bbbb
bbbb
bbbb
cccc
dddd
iiii
kkkk
[root@node2 Desktop]# sort -u file3.txt
aaaa
bbbb
cccc
dddd
iiii
kkkk
[root@node2 Desktop]#
排序说明:sort将文件内容进行排序,添加-u参数会去掉连续重复的行然后打印输出
4.6.以数值进行排序(-g,-n)
[root@node2 Desktop]# cat file4.txt
1
11
11000
100
10e3
2
22
3
37
[root@node2 Desktop]# sort file4.txt
1
100
10e3
11
11000
2
22
3
37
[root@node2 Desktop]# sort -n file4.txt
1
2
3
10e3
11
22
37
100
11000
[root@node2 Desktop]# sort -g file4.txt
1
2
3
11
22
37
100
10e3
11000
[root@node2 Desktop]#
排序说明:
- 没有参数,先对比第一列,如果第一列相同对比第二列,依次类推
- -n参数,每行内容当成字符串数值处理,如果有字母仅考虑前面数值部分,按照数值大小排序
- -g参数,每行当成数值处理,可使用科学计数法
4.7.文件大小排序
[root@node2 Desktop]# ls -l | grep ^- | sort -k5 -nr
-rw-r--r--. 1 root root 77 Feb 21 18:17 file2.txt
-rw-r--r--. 1 root root 45 Feb 21 18:24 file3.txt
-rw-r--r--. 1 root root 30 Feb 21 18:33 file4.txt
-rw-r--r--. 1 root root 28 Feb 21 18:11 file1.txt
[root@node2 Desktop]#
排序说明:
- ls -l查看当前目录下的文件及目录
- grep ^-表示输出以-开始的行,-开始的行表示文件,即提取出说有文件相关信息
- sort按照空格分隔(默认),取第五列(-k5),然后按照字符数值(-n)反向排序(-r)
4.8.从第二行开始排序
head -n 1 FILENAME; tail -n +2 FILENAME | sort
排序说明:
- head -n 1,输出文件第一行
- tail -n +2,从文件第二行开始输出,联合管道符(|),sort排序,及文件的第二行开始排序
- 中间是要那个分号(;)分隔,当成两个命令输出,一起显示,输出结果就是第一行不参与排序的效果
- head详细用法可参考博文《Linux(Centos 7.6)命令详解:head》
- tail详细用法可参考博文《Linux(Centos 7.6)命令详解:tail》