我有一个csv文件,我想按列优先级排序,比如“order by”。例如:
3;1;2
1;3;2
1;2;3
2;3;1
2;1;3
3;2;1
如果这种情况是“选择”的结果,那么“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”命令获得相同的结果。
答案 0 :(得分:122)
sort --field-separator=';' --key=2,1,3
答案 1 :(得分:23)
上面的查理答案在Cygwin(排序版本2.0,GNU textutils)上对我不起作用,以下是:
sort -t"," -k2 -k1 -k1
答案 2 :(得分:20)
假设您的3;10;3
文件中有另一行unsorted.csv
。然后我猜你期望得到一个数字排序的结果:
2;1;3
3;1;2
1;2;3
3;2;1
1;3;2
2;3;1
3;10;3
而不是按字母顺序排序的那个:
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的开头到结尾。 2,2
确保仅使用字段2
。
答案 3 :(得分:-4)
..如果有人按照'排序'解决方案,但现在想要获得超过每行唯一条目的唯一条目(即唯一条目的前X个数字),一旦您使用' sort'对文件进行排序,您可以使用一个小应用程序我在这里创建:
https://github.com/danieliversen/MiscStuff/blob/master/scripts/findTopUniques.java