1 sort命令的基本用法
sort命令有三种执行模式,分别为排序文本、检查文件是否已经排序以及合并文件
sort [option]...[file]...
file参数是要排序的文件列表,多个文件名之间用空格隔开。
如果不使用任何关键字(sort demo.txt),则sort会将整个文本行作为关键字进行排序,其排序规律是首先比较第一列,如果值相同则比较第二列,以此类推。
2 使用单个关键字排序
在某些情况下,用户可能不需要所有的列都参与排序,只需要根据其中的几个列进行比较,这种情况下可以使用-k选项来定义排序关键字,其基本语法如下:
-k pos1[,pos2]
pos1表示排序关键字的起始位置,pos2表示排序关键字的结束位置,这两者之间用逗号隔开。
sort -k 2,3 demo.txt //使用两个列作为一个关键字来进行排序,程序首先会根据第2列进行排序,在第2列形同的情况下,再根据第3列排序。
sort命令中一个文本行只能包括10列
-k pos
表示从pos参数指定的列开始,一直到文本的结束都是排序关键字。sort在排序的时候会从pos指定的列开始,一直比较到行尾。
将列中的一个小子串作为排序关键字的组成部分:
-k pos1[.start][,pos2.[end]]
从pos1列的第start个字符开始,一直到第pos2列的第end个字符结束,都是排序关键字的组成部分。
列号和字符位置编号都从1开始,如果省略了start,则表示从第1个字符开始,如果省略了end,则表示到最后一个字符结束。
根据某个指定的列排序:
-k pos,pos
-k pos[.start],pos[.end]
3 根据关键字降序排列
-r选项是作为全局选项使用,其作用对象为sort命令中所有没有附件修饰符的列
修饰符r可以附加在组成关键字的列号后面,其作用域为所附加的列
sort -r -k 2,3 demo.txt等价于
sort -k 2,3r demo.txt等价于sort -k 2r,3r demo.txt等价于sort -k 2r,3 demo.txt
4 数值列的排序
在默认情况下,sort命令会将所有的列看做字符串,并且按照字符串的排序规则进行排序。为了使sort命令能够正确地处理数值字段,用户需要使用-n选项或者修饰符n。
sort -n -k 3,3 demo.txt等价
sort -k 3,3n demo.txt
修饰符可以多个使用:sort -k 3,3nr demo.txt
如果对非数值列使用-n选项或者修饰符,会导致不可预料的后果
5 自定义分隔符
在默认情况下,sort命令会将连续的空格或制表符作为列的分隔符,但是在实践中,可能会存在这其他分隔符,如冒号、逗号或者分号。
sort命令提供了一个-t选项,可以使得用户自己来指定自己需要的列分隔符
sort -t : -k 3n,3 /etc/password
6 删除重复的行
-u选项可以去掉重复的行
sort -u demo.txt
7 根据多个关键字排序
用户可以在sort命令中同时指定多个关键字,sort命令会根据各个关键字依次来排序
sort -k 3,3nr -k 4,4n demo.txt
定义的两个关键字都使用了修饰符,这些修饰符仅仅作用于所附加的关键字本身,并不影响其他的关键字。
sort -t : -n -k 5b,5 -k 3,3 /etc/passwrd
由于第一个关键字已经有了一个修饰符b,所以sort命令会认为第1个关键字不再需要修饰符,只将-n选项作用于第2个关键字-k 3,3
稳定排序:在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变
8 使用sort命令合并文件夹
使用sort命令可以很方便地合并多个文件,同时将文本文件的内容进行排序:
sort file1 file2
利用-u去掉重复的行
如果用户只想将两个文件合并,不想执行排序处理,可以使用sort -m 选项