sort命令是帮我们依据不同的数据类型进行排序,排序的效率很高,因此也是很常用的命令。
sort参考及说明:https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html
本文主要讨论在排序时使用g所产生的困惑。
在对一个文件进行排序,我们经常会根据文件中的几列依次来排序。
20160722 817657 EUR EUR.L LIBOR M 6 1.53399856212991e-006
20160722 817657 EUR EUR.L LIBOR M 9 1.73682111461871e-006
20160722 817657 USD USD.L BASISOIS M 24 -1.23799103559608e-010
20160722 817657 USD USD.L BASISOIS M 36 -1.61320184994397e-010
对以上的数据进行排序时,我们用到了这样的一个sort command: sort -t $'\t' -k 2,2g -k 3,3g -k 4,4 -k 5,5 -k 6,6 -k 7,7 -f
至于为什么用g,在数据列中也能看到排序科学记数法(e)的时候使用n排序是不准确的,一般来说n,g排序非数字也没有问题,出于通用性考虑要排序的一般字符都使用的g。
根据sort key,按照一个tab分隔列,按照g排序2,3列,其他的默认排序,那么预期结果因该是:
20160722 817657 EUR EUR.L LIBOR M 6 1.53399856212991e-006
20160722 817657 EUR EUR.L LIBOR M 9 1.73682111461871e-006
20160722 817657 USD USD.L BASISOIS M 24 -1.23799103559608e-010
20160722 817657 USD USD.L BASISOIS M 36 -1.61320184994397e-010
然而结果却是:
20160722 817657 USD USD.L BASISOIS M 24 -1.23799103559608e-010
20160722 817657 USD USD.L BASISOIS M 36 -1.61320184994397e-01020160722 817657 EUR EUR.L LIBOR M 6 1.53399856212991e-006
20160722 817657 EUR EUR.L LIBOR M 9 1.73682111461871e-006
这是为什么呢,在google上找了很久也没有找到类似的问题,在*上有经验的人试了试我的这个sortkey去排序,有人排序是正常的。
我尝试用n和默认排序也是正常的,唯独用g出现的不是预想的结果。为了排除其他因素,去掉了所有不影响的因素。
我们对下面的这些数据来进行排序:
ABC
EUR
USD
0
0.000
0.000000000001
0.1
0.0000000000000000000000000000000000000000000000000000
EW
使用sortkey: sort -k 1,1g -f
ABC
USD
0
0.000
0.0000000000000000000000000000000000000000000000000000
EUR
EW
0.000000000001
0.1
这个显然不是我们预期的,我们再使用sortkey: sort -k 1,1 -f
0
0.000
0.0000000000000000000000000000000000000000000000000000
0.000000000001
0.1
ABC
EUR
EW
USD
这个最起码E不会出现在中间,再假如我们使用sortkey:sort -k 1,1n -f
0
0.000
0.0000000000000000000000000000000000000000000000000000
ABC
EUR
EW
USD
0.000000000001
0.1
我们怎么才能让g也能排出字母不会被当成数字呢,我们可以使用:LC_ALL=C sort -k 1,1g -f
ABC
EUR
EW
USD
0
0.000
0.0000000000000000000000000000000000000000000000000000
0.000000000001
0.1
首先,为什么现在g可以正常排序了而不是把e开头的当成0了,这是因为LC_ALL=C 覆盖掉了本地环境设置,排序都按照ascii码来排序,默认应该是LC_ALL=en_US.UTF,也可以单独设置各个LC。
但是接着问题就来了,用LC_ALL=C来排序的话,-f就会失效,因为按照ascii码 小写字母是排在大写字母后面的,这就产生了冲突。
因此可以先执行LC_ALL=C,然后再进行排序。
LC_ALL=en_US.UTF sort -k 1,1g -f 也可以正常的排序了。
这方面还需要多学习,再去找到一些其他方面的问题和主要的问题产生的源头。
有更好的资料请告诉我,关于sort.
Linux sort -g 的困惑的更多相关文章
-
linux sort 命令详解(转 )
linux sort 命令详解 sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比 ...
-
linux sort,uniq,cut,wc命令详解
linux sort,uniq,cut,wc命令详解 sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些 ...
-
linux sort命令学习
linux sort命令以行为单位对文本文件进行排序. 接下来我们会以/tmp/sort_test.txt这个文本文件为例对sort命令的用法进行说明. sh-# cat /tmp/sort_test ...
-
(转)linux sort,uniq,cut,wc命令详解
linux sort,uniq,cut,wc命令详解 sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些 ...
-
linux sort按照指定列排序
sort怎样按指定的列排序0000 27189 41925425065f 15 419254250663 7 419254250675 5 419254250691 76 419254250693 2 ...
-
【转帖】linux sort,uniq,cut,wc,tr,xargs命令详解
linux sort,uniq,cut,wc,tr,xargs命令详解 http://embeddedlinux.org.cn/emb-linux/entry-level/201607/21-5550 ...
-
Linux sort -n 与 -g 排序对比
公司业务需要,天天用awk统计数值然后排序,出问题了,如下: count.sh 是一个统计脚本,把awk输出的值按占比.条数.类型 在重新输出 awk -F\| '{print $16}' *MQTT ...
-
【转】linux sort 命令详解
sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按AS ...
-
linux sort 命令详解
sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按AS ...
随机推荐
-
.Net使用微軟自帶的用戶驗證和登錄授權
使用微軟的用戶驗證,權限管理的方法 一.使用配置好的數據庫, 1.首先建立想定的數據庫(只填寫名字不加載任何表,如:Login數據庫) 2.使用vs兼容工具命令提示.如圖: 3.導入數據庫所需要的ta ...
-
jquery下拉列表选中项改变时获取新选项的属性值
$("#textSel").change(funtion(){ var selVal=$(this).val(); var selText=$("#textSel opt ...
-
201521123034《Java程序设计》第七周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 答:从ArrayList ...
-
Spock - Document - 03 - Data Driven Testing
Data Driven Testing Peter Niederwieser, The Spock Framework TeamVersion 1.1 Oftentimes, it is useful ...
-
Vue-cli 搭建web服务介绍
Node.js 之 npm 包管理 - Node.js 官网地址:点我前往官网 - Node.js 中文镜像官网: 点我前往```` Node.js 是一个基于 Chrome V8 引擎的 JavaS ...
-
基于form表单 写登陆注册
urls urlpatterns = [ url(r'^admin/', admin.site.urls), # 登录界面url(r'^login/$', views.login,name='logi ...
-
wc2016鏖战表达式(可持久treap)
由运算符有优先级可以想到先算优先级小的,然后两边递归,但符号比较少,有大量相同的,同级之间怎么办呢?因为运算符满足结合律,同级之间选一个然后两边递归也是没问题的,然后我们想到用fhqtreap进行维护 ...
-
OpenCV——ROI截取、线性混合、通道分离、合并、亮度对比度调整
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
-
Web API(六):使用Autofac实现依赖注入
在这一篇文章将会讲解如何在Web API2中使用Autofac实现依赖注入. 一.创建实体类库 1.创建单独实体类 创建DI.Entity类库,用来存放所有的实体类,新建用户实体类,其结构如下: us ...
-
python中函数的返回值
函数返回值(一) <1>“返回值”介绍 现实生活中的场景: 我给儿子10块钱,让他给我买包烟.这个例子中,10块钱是我给儿子的,就相当于调用函数时传递到参数,让儿子买烟这个事情最终的目标是 ...