工作原理
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
1 2 3 4 5 6 7 8 9 10
| [adair@localhost ]$ cat seq.txt banana apple pear orange [adair@localhost ]$ sort seq.txt apple banana orange pear
|
sort -u
-u : unique 唯一,排序并且排除重复项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| [adair@localhost ]$ cat seq.txt banana apple pear orange pear [adair@localhost ]$ sort seq.txt apple banana orange pear pear [adair@localhost ]$ sort -u seq.txt apple banana orange pear
|
pear由于重复被-u选项无情的移除了。
sort -r
-r : reverse 反向排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [adair@localhost ]$ cat number.txt 1 3 5 2 4 [adair@localhost ]$ sort number.txt 1 2 3 4 5 [adair@localhost ]$ sort -r number.txt 5 4 3 2 1
|
sort -o
-o : output 将排序结果输出到源文件
sort默认将结果输出到标准输出,所以需要重定向才可以将结果写入文件,形如 sort filename > newfile
但是如果你想把排序结果输出到原文件中,用重定向不可行
1 2
| [adair@localhost ]$ sort -r number.txt > number.txt [adair@localhost ]$ cat number.txt
|
使用 -o 参数可以正常输出到源文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| [adair@localhost ]$ cat number.txt 1 3 5 2 4 [adair@localhost ]$ sort -r number.txt -o number.txt [adair@localhost ]$ cat number.txt 5 4 3 2 1
|
sort -n
-n : number 安装数字进行排序,默认数字会被当作字符串进行比较,会出现一下情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [adair@localhost ]$ cat number.txt 1 10 19 11 2 5 [adair@localhost ]$ sort number.txt 1 10 11 19 2 5
|
使用 -n 参数以后
1 2 3 4 5 6 7
| [adair@localhost ]$ sort -n number.txt 1 2 5 10 11 19
|
sort -t -k 参数
-t : tables 指定分隔符,默认tab为分隔符
-k : 指定安装哪一个分割区域进行排序
1 2 3 4 5 6 7 8 9 10 11 12 13
| [adair@localhost ]$ cat facebook.txt banana:30:5.5 apple:10:2.5 pear:90:2.3 orange:20:3.4 [adair@localhost ]$ sort -n -k 2 -t : facebook.txt apple:10:2.5 orange:20:3.4 banana:30:5.5 pear:90:2.3
|
其他的sort常用选项
- -f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
- -c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
- -C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1
- -M会以月份来排序,比如JAN小于FEB等等
- -b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。