sort命令可以给文本进行排序。sort命令操作的是行。
shell中sort命令有3中执行模式,分别是排序文本,检查文件是否已经排序,合并文件。
2.sort的使用
语法:
sort [选项] ... [文件] ...
选项:
-b:忽略前面空格。
-c:测试文件是否已经排序。
-d:根据字典顺序排序,仅比较数字 字母 空格等字符。
-f:忽略大小写。
-i:仅比较可打印字符。
-n:纯数字排列
-R:根据哈希值随机排序。
-r:反向,颠倒顺序。
-k:定义排序关键字。原来的:第几个区间,与t相辅。
-t:分隔符
-m:仅仅合并已经排序好的文件,不执行排序操作。
-s:稳定的排序算法。
-o:排序结果写入文件,而不是标准输出到设备。
-u:相同的行只留一行
-M:月份
文件:
file:多个文件要使用空格分隔。
3.范例
3.1 不加选项进行升序排序
直接执行sort,不加选项,默认根据第一列的信息进行排序。
3.2 使用单行关键字排序 -k
默认是根据第一列来排序,使用-k选项来定义排序的关键字,语法如下:
-k pos1 [, pos2]
pos1 表示起始位置,pos2 表示结束位置。如果关键字的第一列相同,进行比较第二列。
-k pos 并不是表示只比较 pos 列,而是比较从 pos 列,到行尾的列。
如何根据日志里面小时进行排序呢?(日志里的小时和日期写在一起,还有英文)
那就根据某列的第几个字符开始。格式如下:
-k pos1[.start] [, pos2[.end]]
pos1 表示起始位置,pos2 表示结束位置。
start 表示起始列的第几个字符。end 表示结束列的第几个字符。
案例略。
3.3 根据关键字降序排序 -r
默认的需要是升序排序,如果想倒叙排列,需要使用-r选项。
3.4 数值列的排序 -n
默认的排序是一个字符一个字符的比较。不能正确的比较出数值的大小,如果想比较出数值的大小需要使用 -n 选项。语法如下:两个等价
sort -n -k 2 1.txt
sort -k 2,2n 1.txt
上面的默认的排序,下面的是数值排序。上面的就把992排在了最下面。因为第一个字符9最大。
3.5 自定义分隔符 -t
如果分隔符不是空格或者制表符,需要使用-t选项来指定分隔符。
sort -t ":" -r -k 3 /etc/passwd
3.6 删除重复的行 -u
使用-u选项,可以去掉重复的行,但是不知道为什么去不掉带空格的那行。
3.7 根据多个关键字排序 -k -k
根据第一个列升序,和第二列数字倒叙,应该怎么排。
sort -k 1,1 -k 2,2rn 1.txt
3.8 合并文件
sort可以将两个文件合并,同时对文件内容进行排序,语法如下:
sort file1 file2 ... > filen
原文地址:http://blog.51cto.com/11060853/2107223