sort是Linux命令,主要用于排序文件、对已排序的文件进行合并,并检查文件以确定它们是否已排序。
语法
sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -m] [ -n ] [ -r ] [ -u ] [ -o OutFile ] [ -t Character ] [ -T Directory ] [ -y [ Kilobytes ] ] [ -z RecordSize ] [ [ + [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] [ - [ FSkip ] [ .CSkip ] [ b ]
[ d ] [ f ] [ i ] [ n ] [ r ] ] ] ... [ -k KeyDefinition ] ... [ File ... ]
描述
sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。-(减号)代替文件名指定标准输入。如果您不指定任何文件名,那么该命令对标准输入排序。可以使用 -o 标志指定输出文件。
如果不指定任何标志,sort 命令基于当前语言环境的整理顺序对输入文件的所有行排序。
实例:
对当前文件夹文件排序(默认):
bash-4.1$ ls -l | sort
drwxr-xr-x. 2 root root 4096 Nov 9 12:33 conf
-rw-r--r--. 1 root root 1498 Nov 9 12:33 dubbo-consumer.xml
-rw-r--r--. 1 root root 2146 Nov 9 12:33 task-config.xml
-rw-r--r--. 1 root root 3008 Nov 9 12:33 logback.xml
-rw-r--r--. 1 root root 467 Nov 9 12:33 task.properties
-rw-r--r--. 1 root root 567 Nov 9 12:33 root-bean.xml
输入当前文件夹中的文件大小并从小到大排序:
-bash-4.1$ ls -l | awk '{print $5}' | sort -n
467
567
1498
2146
3008
4096
-bash-4.1$ ls -l | sort -n -k5
total 24
-rw-r--r--. 1 root root 467 Nov 9 12:33 task.properties
-rw-r--r--. 1 root root 567 Nov 9 12:33 root-bean.xml
-rw-r--r--. 1 root root 1498 Nov 9 12:33 dubbo-consumer.xml
-rw-r--r--. 1 root root 2146 Nov 9 12:33 task-config.xml
-rw-r--r--. 1 root root 3008 Nov 9 12:33 logback.xml
drwxr-xr-x. 2 root root 4096 Nov 9 12:33 conf
按第二列从小到大排序,不显示重复的值:
-bash-4.1$ ls -l | awk '{print $2}' | sort -n -u
1
2
24
-bash-4.1$ ls -l | awk '{print $2}' | sort -r -u
24
2
1
[rocrocket@rocrocket programming]$ sort -r sample.txt -o sample
[rocrocket@rocrocket programming]$ cat sample.txt
5
4
3
2
1
-t 参数:指定列之间的分隔符,一般和 -K 连用,使用指定列排序:
[rocrocket@rocrocket programming]$ sort -n -k 2 -t ‘:’ sample.txt
10:2.5
20:3.4
30:4.5
90:5.3
其他的sort常用选项
-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1
-M会以月份来排序,比如JAN小于FEB等等
-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。