Linux命令之sort

Linux自带排序命令:sort
在一些临时性排序需求的时候,使用该命令可以快速的处理。小巧的工具使我们使用非常便捷。
语法:sort [-bcCdfghiRMmnrsuVz] [-k field1[,field2]] [-S memsize] [-T dir] [-t char] [-o output] [file ...]

可选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-k:以哪个区间 (field) 来进行排序
-m:将几个排序好的文件进行合并,只是单纯合并,不做排序
-M:将前面3个字母依照月份的缩写进行排序
-n:依照数值的大小排序
-o<输出文件>:将排序后的结果存入指定的文件
-r:降序
-R: 乱序
-u:忽略相同行
-t<分隔字符>:指定分隔符,默认的分隔符为空白字符和非空白字符之间的空字符

例子

1
2
3
4
5
6
7
8
9
10
[@huzhibindeMacBook-Pro:tmp]$ cat sort.log
[@huzhibindeMacBook-Pro:tmp]$ cat sort.log
a mac 2000 500 2K
d winxp 4000 300 3G
e bsd 1000 600 4M
b linux 1000 200 5K
f SUSE 4000 300 6M
g winxp 500 300 3G
c win7 2000 100 7G
c Debian 600 200 8K

打印从哪列开始是乱序

1
2
[@huzhibindeMacBook-Pro:tmp]$ sort -c sort.log
sort: sort.log:4: disorder: b linux 1000 200 5K

指定列排序

默认按照字符排序

1
2
3
4
5
6
7
8
9
[@huzhibindeMacBook-Pro:tmp]$ sort -k 3 sort.log
b linux 1000 200 5K
e bsd 1000 600 4M
c win7 2000 100 7G
a mac 2000 500 2K
d winxp 4000 300 3G
f SUSE 4000 300 6M
g winxp 500 300 3G
c Debian 600 200 8K

按照数字排序

1
2
3
4
5
6
7
8
9
[@huzhibindeMacBook-Pro:tmp]$ sort -k 3n sort.log
g winxp 500 300 3G
c Debian 600 200 8K
b linux 1000 200 5K
e bsd 1000 600 4M
a mac 2000 500 2K
c win7 2000 100 7G
d winxp 4000 300 3G
f SUSE 4000 300 6M

-u和uniq的区别

在指定-k的时候,-u是会按照指定的列来忽略重复,uniq是按照整行来去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[@huzhibindeMacBook-Pro:tmp]$ sort -k 3n -u  sort.log
g winxp 500 300 3G
c Debian 600 200 8K
e bsd 1000 600 4M
a mac 2000 500 2K
d winxp 4000 300 3G
[@huzhibindeMacBook-Pro:tmp]$ sort -k 3n sort.log | uniq
g winxp 500 300 3G
c Debian 600 200 8K
b linux 1000 200 5K
e bsd 1000 600 4M
a mac 2000 500 2K
c win7 2000 100 7G
d winxp 4000 300 3G
f SUSE 4000 300 6M