sort 排序的结果为什么与strcmp不一样

关于sort命令的文章已经有很多,在此我也会略带转载一下常用的参数,今天我重点要写的内容是sort 与 strcmp 排序的结果不一样呢。

首先,看一下例子:

<pre name="code" class="html">[root@nn ~]# rpm  -qa | sort
glib2-2.28.8-4.el6.x86_64glib2-devel-2.28.8-4.el6.x86_64glibc-2.12-1.166.el6_7.7.x86_64glibc-common-2.12-1.166.el6_7.7.x86_64glibc-devel-2.12-1.166.el6_7.7.x86_64glibc-headers-2.12-1.166.el6_7.7.x86_64glibc-static-2.12-1.166.el6_7.7.x86_64glibmm24-2.22.1-1.el6.x86_64glib-networking-2.28.6.1-2.2.el6.x86_64glusterfs-3.6.0.54-1.el6.x86_64

 你有没有发现glib-networking 比glibc-common小,而在用strcmp()函数时glibc-common较大,strcmp()函数大家应该都知道是根据ASCII逐位比较大小的。在ASCII中,中划线(-)是45,而小写字母是90多,因此glibc-common大,更符合大家的逻辑思维。 


但是你有没有注意这里的警告呢:

[root@nn ~]# man sort 

***  WARNING  ***  The  locale specified by the environment affects sort order.  Set LC_ALL=C to get the traditional sort order that uses native
       byte values.
我们看一下此时的环境变量
[root@nn ~]# echo $LC_ALL
zh_CN.UTF-8
[root@nn ~]# 


那么我们将环境变量改成C呢
[root@nn ~]# export LC_ALL=C; rpm -qa | sort >c
[root@nn ~]#
glib-networking-2.28.6.1-2.2.el6.x86_64
glib2-2.28.8-4.el6.x86_64
glib2-devel-2.28.8-4.el6.x86_64
glibc-2.12-1.166.el6_7.7.x86_64
glibc-common-2.12-1.166.el6_7.7.x86_64
glibc-devel-2.12-1.166.el6_7.7.x86_64
可以看出此时的结果sort 和strcmp 是一样的。

由这个例子,我们可以知道环境变量的重要性。不同的环境变量会导致不同的结果。

下面转载了一下sort的常用选项

-b:忽略每行前面开始出的空格字符; 
-c:检查文件是否已经按照顺序排序; 
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母; 
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符; 
-m:将几个排序号的文件进行合并; 
-M:将前面3个字母依照月份的缩写进行排序; 
-n:依照数值的大小排序; 
-o<输出文件>:将排序后的结果存入制定的文件; 
-r:以相反的顺序来排序; 
-t<分隔字符>:指定排序时所用的栏位分隔字符; +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值