使用sort -k 2 -n排序ro值不符合预期,求助排查与解决方法
问题原因与解决办法
嘿,我懂你遇到的这个坑!核心问题其实是你选的排序字段不对~
你看,你的每行内容按空白拆分后,结构是这样的:
- 第1字段:文件名(比如
m_2_mdot_3_a_1.dat) - 第2字段:固定的
ro= - 第3字段:你真正要排序的数值(比如
303112.12)
你用sort -k 2 -n的时候,是告诉sort从第2字段(也就是ro=)开始往后的整个内容作为排序键。虽然加了-n要做数值排序,但sort得先跳过ro=这些非数字字符才能找到后面的数值,这个过程中很容易因为locale设置或者字符串解析的小问题,导致sort没有按数值逻辑排序,反而退化成了字符串字典序排序——这就是你看到1000、100001、1000.2这种奇怪顺序的原因。
正确的解决命令
直接指定第3字段作为排序键就搞定了,用这个命令:
sort -k 3 -n 你的输入文件名 > name.txt
如果是直接从终端输入内容(敲完行按Ctrl+D结束),可以去掉输入文件名:
sort -k 3 -n > name.txt
要是担心多行空格/制表符影响字段拆分,还可以明确指定空白作为分隔符,更严谨:
sort -t' ' -k 3 -n 你的输入文件名 > name.txt
这样就能完美按照ro值从低到高排序啦!
内容的提问来源于stack exchange,提问作者JESUS_M
相关产品推荐
相关产品推荐

