使用Unix排序使用小数部分对pos/neg数字进行排序

tom*_*afe 5 unix linux sorting

运用 sort (coreutils) 5.2.1

我有以下文件,我想按字段4的非整数部分排序.这可以是负数或正数,也可能具有值INF.

field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=0.123 field5 field6
field1 field2 field3 tag=4.22 field5 field6
field1 field2 field3 tag=5.77 field5 field6
field1 field2 field3 tag=-1.92 field5 field6
field1 field2 field3 tag=-1.91 field5 field6
field1 field2 field3 tag=INF field5 field6
Run Code Online (Sandbox Code Playgroud)

我希望将其排序为

field1 field2 field3 tag=-1.92 field5 field6
field1 field2 field3 tag=-1.91 field5 field6
field1 field2 field3 tag=0.123 field5 field6
field1 field2 field3 tag=4.22 field5 field6
field1 field2 field3 tag=5.77 field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
Run Code Online (Sandbox Code Playgroud)

鉴于字段的数字部分位于字符位置4(假设索引从0开始,我不确定),我尝试sort使用以下选项:

  • sort -g -k4.4 inputfile
  • sort -g -k4.5 inputfile
  • sort -n -k4.4 inputfile
  • sort -n -k4.5 inputfile
  • sort -g inputfile

这些都产生以下结果,这是接近但不太正确.大小正确排序,但我想要最负面值.

field1 field2 field3 tag=0.123 field5 field6
field1 field2 field3 tag=-1.91 field5 field6
field1 field2 field3 tag=-1.92 field5 field6
field1 field2 field3 tag=4.22 field5 field6
field1 field2 field3 tag=5.77 field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
Run Code Online (Sandbox Code Playgroud)

我该如何sort表现?

FWIW,这里有更多信息:

LANG = en_US.UTF-8
Red Hat Enterprise Linux WS release 4 (Nahant Update 6)
Run Code Online (Sandbox Code Playgroud)

Jam*_*ter 1

我使用的是 Mac,所以它的实现可能略有不同,但我发现这是可行的:

sort -gb -k 4.5,4 inputfile

英文:“排序,以-g一般数字方式,忽略-b lanks,使用第 4-k(c)列数据的文件输入文件,从该列中的第 5个元素到该列中数据的末尾第四栏”

field1 field2 field3 tag=-1.92 field5 field6
field1 field2 field3 tag=-1.91 field5 field6
field1 field2 field3 tag=0.123 field5 field6
field1 field2 field3 tag=4.22 field5 field6
field1 field2 field3 tag=5.77 field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
Run Code Online (Sandbox Code Playgroud)