使用“sorting”命令按列优先级sortingCSV文件

我有一个csv文件,我想按列优先级sorting,如“order by”。 例如:

3;1;2 1;3;2 1;2;3 2;3;1 2;1;3 3;2;1 

如果这种情况是“select”的结果,那么“order by”将如下所示:order by column2,column1,column3 – 结果将是:

 2;1;3 3;1;2 1;2;3 3;2;1 1;3;2 2;3;1 

我想知道如何在Unix上使用“sort”命令得到相同的结果。

 sort --field-separator=';' --key=2,1,3 

上面的查理对Cygwin(sorting版本2.0,GNU textutils)不起作用,下面是:

 sort -t"," -k2 -k1 -k1 

假设你的unsorted.csv文件中有另一行3;10;3 。 那么我想你会期望一个数字sorting的结果:

 2;1;3 3;1;2 1;2;3 3;2;1 1;3;2 2;3;1 3;10;3 

而不是按字母sorting:

 2;1;3 3;1;2 3;10;3 1;2;3 3;2;1 1;3;2 2;3;1 

为了得到这个,你必须使用-n

 sort --field-separator=';' -n -k 2,2 -k 1,1 -k 3,3 unsorted.csv 

值得一提的是2,2必须被使用。 如果只使用了2 ,那么sort将从字段2的开头到结束的string。 2,2确保只使用字段2

..如果任何人按照“sorting”的解决scheme,但现在想获得比单行唯一条目(即独特的前X项),一旦你使用“sorting”sorting文件,你可以使用我在这里创build一个小应用程序:

https://github.com/danieliversen/MiscStuff/blob/master/scripts/findTopUniques.java