使用 `sort` 对数字字符串进行排序

使用 `sort` 对数字字符串进行排序

我通读了sort手册但感觉好像遗漏了一些东西。

源文件

这是我要排序的 CSV 文件:

$ cat SAMPLE.CSV 
compid,active,tagno
-2147483646,1,"1"
-2147483645,0,"10000"
-2147483644,0,"1002"
-2147483127,1,"76245.1"
-2147483126,1,"76245.2"
-2147468087,1,"76245"

期望结果

我尝试按第三列(最后一列)进行排序,也称为tagno列。所需的结果应如下所示:

compid,active,tagno
-2147483646,1,"1"
-2147483644,0,"1002"
-2147483645,0,"10000"
-2147468087,1,"76245"
-2147483127,1,"76245.1"
-2147483126,1,"76245.2"

徒劳的尝试

从各方面来看,以下命令应该能够完成我想要的操作:

$ sort SAMPLE.CSV -n -k 3 -t ','
-2147468087,1,"76245"
-2147483126,1,"76245.2"
-2147483127,1,"76245.1"
-2147483644,0,"1002"
-2147483645,0,"10000"
-2147483646,1,"1"
compid,active,tagno

我甚至尝试使用“general-numeric-sort”选项:

$ sort SAMPLE.CSV -g -k 3 -t ','
-2147468087,1,"76245"
-2147483126,1,"76245.2"
-2147483127,1,"76245.1"
-2147483644,0,"1002"
-2147483645,0,"10000"
-2147483646,1,"1"
compid,active,tagno

这是第一次使用,sort所以我觉得我缺少了一些基本的东西。

sort版本

$ sort --version
2.3-Apple (99)

请帮助?

答案1

中的默认字段分隔符sort是从非空白到空白的转换。这里您需要一个不同的分隔符:双引号。

sort -t'"' -k2n SAMPLE.CSV

然后按第二列排序。幸运的是,标题行中的第二列是空的,因此它排在第一位。

相关内容