Linux之sort命令详解

注: 部分概念介绍来源于网络

Linux sort 命令用于将文本文件内容加以排序。
sort 可针对文本文件的内容,以行为单位来排序。

语法
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]

参数说明:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
-C 检查文件是否已排好序,如果乱序,不输出内容,仅返回1
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-u 意味着是唯一的(unique),输出的结果是去完重了的。
-o <输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t <分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
--help 显示帮助。
--version 显示版本信息。
[-k field1[,field2]] 按指定的列进行排序。

sort的工作原理
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

#输出行中去除重复行
sort -u seq.txt
#将数字按字符来排序,1-2-10-11-20
sort -n number.txt
#r表示降序,n表示按数字进行排序,20-11-10-2-1
sort -n -r number.txt
sort的-o选项
#由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,例如sort -n -r number.txt > number1.txt。
#但是,如果你想把排序结果输出到原文件中,用重定向可就不行了。number清空了。
#所以我们需要使用-o选项,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。
sort -n -r number.txt -o number.txt
#文件有三列,列与列之间用冒号隔开了,第一个列是公司名称,第二个列是公司人数,第三个列是员工平均工资,采用第二列来排序,如果第二列相同则用第三列排序
#sort提供了-t选项,后面可以设定间隔符,指定了间隔符之后,就可以用-k来指定列数了。
sort -n -k2 -k3 -t : facebook.txt
我想让facebook.txt按照员工工资降序排序,如果员工工资相同的,则按照公司人数升序排序:
sort -n -t : -k3r -k2 testsort.txt 

-k选项的具体语法格式
如下:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
这个语法格式可以被其中的逗号(“,”)分为两大部分,Start部分和End部分。
先给你灌输一个思想,那就是“如果不设定End部分,那么就认为End被设定为行尾”。这个概念很重要的,但往往你不会重视它。
Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。
C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的-k 2和-k 3就是省略了C.Start的例子喽。
FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。
同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。

#从公司英文名称的第二个字母开始进行排序:
sort -t ' ' -k1.2 testsort.txt 
#只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:
sort -t ' ' -k1.2,1.2 -k3,3nr testsort.txt 
#以员工平均工资列进行数值排序,然后加-u后,会把重复行删除,-u只识别用-k设定的域,发现相同,就将后续相同的行都删除。
sort -k3 -u testsort.txt 
#这里设置了两层排序优先级的情况下,使用-u就没有删除任何行。原来-u是会权衡所有-k选项,将都相同的才会删除,只要其中有一级不同都不会轻易删除的
sort -n -k2 -k3 -u testsort.txt 
 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值