sort
将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按 ASCII
码值进行比较,最后将他们按升序输出。
常用参数:
|
|
默认排序
|
|
去除重复行
|
|
按降序排序
|
|
重定向
|
|
sort
默认按字符排序,出现数字 10
比数字 2
小的原因是,sort
将数字当成字符比较,首先比较数字 10
的第一位 1
比数字 2
小。想要按照数字排序,需要加 -n
。
|
|
|
|
当一行出现多种区域时,默认按行首字母排序,可以通过参数 -t -k
选择不同的域。
|
|
参数 -t
指定分隔符,-k
选择不同的域,-t ':' -k2n
表示,以 :
号为分隔符,选择第二列,并按照数字排列。我们看到第二列有相同的数字,此时可以增加条件,当第二列相同时,按照第三列来排序。
|
|
-k
选项的语法格式:[ FStart [ .CStart ] ][ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
,这个语法格式可以被其中的 ,
分为两大部分,Start
部分和 End
部分。如果不设定End
部分,那么就认为End
被设定为行尾。
Start
部分由三部分组成,其中的 Modifier
部分就是我们之前说过的类似 n
和 r
的选项部分。C.Start
是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的 -k2
和 -k3
就是省略了 C.Start
。
FStart.CStart
,其中 FStart
表示使用的域,而 CStart
则表示在 FStart
域中从第几个字符开始算排序首字符。
同理,在 End
部分中,你可以设定 FEnd.CEnd
,如果你省略 .CEnd
,则表示到域尾,即本域的最后一个字符。或者,如果你将 CEnd
设定为 0
,也是表示结尾到域尾。
|
|
-k1.2
表示从第一列的第二个字符开始排序,因为没有给出 End
部分,所以默认到最后一个字符。可以看到 sohu
与 google
第二个都是 o
但是 sohu
第三个是 h
,所以排在前面。
如果只以第二个字符排序,我们可以使用下面的命令:
|
|