我有一个csv文件,我想按列优先级对它进行排序,比如"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“命令获得相同的结果。
发布于 2012-02-28 03:39:15
sort --field-separator=';' --key=2,1,3
发布于 2015-01-05 23:56:19
假设您的unsorted.csv
文件中有另一行3;10;3
。那么我猜你希望得到一个数字排序的结果:
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
。
发布于 2013-02-02 00:04:41
在Cygwin (sort version 2.0,GNU textutils)上,上面的答案对我不起作用,下面的答案起作用了:
sort -t"," -k2 -k1 -k1
https://stackoverflow.com/questions/9471101
复制相似问题