简介
sort是在Linux里非常常用的一个排序命令。将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,默认将他们按升序输出。
常用参数
-u :去除重复行
-r :降序排列,默认是升序
-o : 将排序结果输出到文件中,类似重定向符号>
-n :以数字排序,默认是按字符排序
-t :分隔符
-k :第N列
-b :忽略前导空格。
-R :随机排序,每次运行的结果均不同
常用命令释义
使用如下文件完成各选项使用
-u(去重)选项
sort -u test.txt
这里使用-u选项去重处理了数据 lisi 20 8700
-r(倒序)选项
sort默认的排序方式是升序(且是按照每行的首字符),如果想改成降序,就加个-r就搞定了
sort -r test.txt
-o(重定向)选项
由于sort默认是把结果输出到标准输出,如果希望输入到文件,需要用重定向才能将结果写入文件,形如sort filename > newfile。排序结果输出到原文件中重定向失败,需要使用-o参数
此处使用重定向到原文件失败,如果使用-o参数就是可行的
sort -r test.txt -o test.txt
-n(按数字)选项
sort 默认是按每行文本的首字符的ASCII编码升序排列的,如果一个文本的首字符是数字如下文件内容
此时如果使用sort排序时会出现如下结果:
2数字居然排在了10、19、11等的后面,因为sort默认的排序规则(按每行的首字符升序),10、19、11等数字的首字符都是1,所以排序要比2要更靠前。这里就使用-n参数做排序接口
sort -n number.txt
-t选项和-k选项
-t选项表示分隔符,-k选项后面跟数字,表示以第几列为排序首字符(默认是以每行的首字符)
之前的test.txt文件内容如下:
三列数据,第一列表示名称,第二列表示年龄,第三列表示工资,如果要以第三列升序排列
sort -n -t ' ' -k 3 test.txt
如果有以下要求:去重,按工资降序排列,如果工资相同以年龄升序排列
sort -t ' ' -k 3nr -k 2n test.txt