我通读了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
然后按第二列排序。幸运的是,标题行中的第二列是空的,因此它排在第一位。