UNIX 用指数值排序?
我有一个包含 7 个数据字段的 csv 文件。我想按相反的数字顺序对第七个字段进行排序(首先是最小值)。数据的第 7 个字段如下所示:
0.498469643137
1
6.98112003175e-10
9.11278069581e-06
我尝试像这样使用 UNIX 排序工具:
$ sort -t"," -n -k -r 7 <my_file>
我遇到的问题是排序无法识别指数形式。例如,sort 认为 6.98112003175e-10
大于 1
。如何使用 sort 对 csv 列进行排序,但又能识别科学记数法?预先感谢您的帮助。
I have a csv file with 7 fields of data. I want to sort the 7th field in reverse numerial order (smallest values first). The 7th field of data looks like this:
0.498469643137
1
6.98112003175e-10
9.11278069581e-06
I have tried to use the UNIX sort tool like this:
$ sort -t"," -n -k -r 7 <my_file>
The problem I am having is that sort does not recognize exponential form. For example, sort thinks 6.98112003175e-10
is larger than 1
. How can I use sort to sort a csv column, but recognize the scientific notation? Thanks in advance for the help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用 '-g' 选项排序应该可以满足您的要求。
-g 选项表示“使用通用数值”进行排序
sort with '-g' option should do the trick for you.
-g option indicates 'use generic numerical value' for sorting
请注意,您的区域设置可能采用另一个分隔符:
例如,在俄语本地化中,“
,
”字符分隔数字的各个部分,而不是“.
”。在这种情况下,您应该考虑 LANG 变量。就我而言,LANG 设置为 ru_RU.KOI8-R,因此 sort -g 给出了错误的结果。
Please note, that your locale may assume another delimiter:
For example, in russian localization '
,
' character delimits parts of number rather than '.
'. In this case you should take into account the LANG variable.In my case LANG was set to
ru_RU.KOI8-R
and sosort -g
gave me wrong result.所以 - 只是给那些不知道如何使用它的人一个例子:你使用“-g”而不是“-n”。
l = 1,0.3,6.01e-10
排序 -t$',' -n example.txt
0.3
1
6.01e-10
排序 -t$',' -g example.txt
6.01e-10
0.3
1
So - just to give an example for those who do not know how to use it: instead of "-n" you use "-g".
l = 1,0.3,6.01e-10
sort -t$',' -n example.txt
0.3
1
6.01e-10
sort -t$',' -g example.txt
6.01e-10
0.3
1
-g
-n
正确的命令是
sort -g -k7,7 input.txt
-g
-n
The correct command is
sort -g -k7,7 input.txt