45

我有一个包含 7 个数据字段的 csv 文件。我想以相反的数字顺序对第 7 个字段进行排序(首先是最小值)。第 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 列进行排序,但识别科学记数法?在此先感谢您的帮助。

4

4 回答 4

73

使用“-g”选项排序应该可以为您解决问题。-g 选项表示“使用通用数值”进行排序

于 2011-09-14T13:42:38.023 回答
10

请注意,您的语言环境可能会采用另一个分隔符:例如,在俄语本地化中,' ,' 字符分隔数字的一部分而不是 ' .'。在这种情况下,您应该考虑 LANG 变量。

在我的情况下,LANG 被设置为ru_RU.KOI8-R,所以sort -g给了我错误的结果。

于 2013-10-28T11:16:23.903 回答
3

所以 - 只是给那些不知道如何使用它的人举个例子:你使用“-g”而不是“-n”。 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

于 2016-04-04T17:20:56.007 回答
0
  1. 你应该使用-g
  2. 不要使用-n

正确的命令是sort -g -k7,7 input.txt

于 2019-11-04T04:39:40.120 回答