Linux(Centos 7.6)命令详解:sort

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值