使用“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