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 ,所以排在前面。
如果只以第二个字符排序,我们可以使用下面的命令:
|
|