[unix] “sort”명령을 사용하여 열 우선 순위별로 CSV 파일 정렬

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”명령을 사용하여 동일한 결과를 얻는 방법을 알고 싶습니다.



답변

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


답변

다른 행이 가정 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사용해야 하는 것을 언급 할 가치가 있습니다. only 2가 사용되는 경우 sort필드 2의 시작부터 끝까지 문자열 을 가져옵니다. 2,2필드 만 사용되는지 확인합니다 2.


답변

위의 Charlie의 대답은 Cygwin (정렬 버전 2.0, GNU textutils)에서 저에게 효과적이지 않았습니다.

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


답변

.. 누군가 ‘정렬’솔루션을 따랐지만 이제 한 줄에 하나의 고유 항목 (즉, 고유 항목의 상위 X 개) 이상을 얻고 자하는 경우 ‘정렬’을 사용하여 파일을 정렬하면 다음을 사용할 수 있습니다. 여기에서 만든 작은 앱 :

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


답변