首页 > 技术文章 > Linux sort -n 与 -g 排序对比

z977690557 2018-04-26 09:10 原文

count.sh 是一个统计脚本,把awk输出的值按占比、条数、类型 在重新输出

awk -F\| '{print $16}' *MQTT*  | ~/count.sh  | sort -nk3
91.51% 345         0
Total 377
2.65% 10            1
5.84% 22            2

0与1之间加了个total值,我想要的结果是total排在第一行,然后是的0、1、2,

后来找到的解决方法:

awk -F\| '{print $16}' *MQTT*  | ~/count.sh  | sort -nk3   -k2r
Total 377
91.51% 345         0
2.65% 10            1
5.84% 22            2

在第三列按照从小到大排序后,再把第二例按照倒序排列就行了。

出现新的问题:

(1)有时候会出现按照第二例倒序排序失败。       (以前工作中遇见)

(2)有时候在添加第二列排序后,整个排序混轮。(以前工作中遇见)

在多实验了几次后,可以肯定是选项 -n 有问题,找了一个写博客时间久的,点击量还不错的,结果如下:

看红色框里内容,我看了好几个博客 ,都是这样解释的。然后我又查看我自学的网站:菜鸟教程上,也是这么解释的。但就是解释不通我上面的问题。我于是 sort --help,逐条看每个选项,读第二遍的时候,发现问题了:

-n 选项有数值改为了字符串 ;在 -r选项的旮旯里,还有一个-g选项。按理来说,这个仔细看的话也是很容易发现的,但是我以前的三方终端显示的是英文版,长长的一溜,就没有仔细看过,我记得第一才看时为了方便,专门去博客园,就我上面截图的那家仔细看了中文版的,悲催的发生了今天的事。然后我就把我的终端改为中文版的,细看sort详解才发现这个问题。

来看-g的结果:

awk -F\| '{print $16}' *MQTT*  | ~/count.sh  | sort -gk3
Total 377
91.51% 345        0
2.65% 10           1
5.84% 22           2

完美。只能说,人家博客写得那个年代,确实是那样解释的,但是到了现在,sont命令有了更细的更新,而我还在用以前的方法来解决现在的问题,有时候就不行了。我们在相信前人的同时,更要自己动手来查找解决。

基本的排序规则:

除非指定了‘-r’参数,否则排序的优先级按下面规则排序

  • 以数字开头的行优先级最高
  • 以小写字母开头的行优先级次之
  • 待排序内容按字典序进行排序
  • 默认情况下,‘sort’命令将带排序内容的每行关键字当作一个字符串进行字典序排序(数字优先级最高,参看规则 1)   

  像上面发生的问题,其实在很多时候,根本就不是问题,对于我来说,假如我不是要把结果复制下来,为了看起来更整齐一些,我根本就不会去仔细研究,发现-g 与-n区别,没有追求完美的心态,得过且过,有问题,不可怕,可怕的是习惯的去遗忘。

 

 

 

 

  

推荐阅读