Sort CSV file by column priority using the “sort” command

不打扰是莪最后的温柔 提交于 2019-11-27 09:34:24

问题


I have a csv file, and I would like to sort it by column priority, like "order by". For example:

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

If this situation was the result of a "select", the "order by" would be as follows: order by column2, column1, column3 - the result would be:

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

I'd like to know how to get this same result using "sort" command on Unix.


回答1:


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



回答2:


Charlie's answer above didn't work for me on Cygwin (sort version 2.0, GNU textutils), the following did:

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



回答3:


Suppose you have another row 3;10;3 in your unsorted.csv file. Then I guess you expect a numerically sorted result:

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

and not an alphabetically sorted one:

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

To get that, you have to use -n:

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

It is worth mentioning that 2,2 has to be used. If only 2 is used, then sort takes the string from beginning of field 2 to the end. 2,2 makes sure that only field 2 is used.




回答4:


..and if anyone followed the 'sort' solution but now wants to get more than the single unique entry per line (i.e. the top X number of unique entries), once you've sorted the file using 'sort', you can use a little app I created here:

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



来源:https://stackoverflow.com/questions/9471101/sort-csv-file-by-column-priority-using-the-sort-command

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!