使用“sort”命令按列优先级对CSV文件进行排序

时间:2012-02-27 19:36:16

标签: unix sorting csv sql-order-by

我有一个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”命令获得相同的结果。

4 个答案:

答案 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