Сортировать файл CSV по приоритету столбца с помощью команды «сортировать» - PullRequest
77 голосов
/ 27 февраля 2012

У меня есть CSV-файл, и я хотел бы отсортировать его по приоритету столбца, например «упорядочить по».Например:

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

Если бы эта ситуация была результатом «выбора», «порядок по» был бы следующим: порядок по столбцу 2, столбцу 1, столбцу 3 - результат будет:

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

Я хотел бы знать, как получить тот же результат, используя команду "sort" в Unix.

Ответы [ 4 ]

126 голосов
/ 27 февраля 2012
sort --field-separator=';' --key=2,1,3
24 голосов
/ 01 февраля 2013

Ответ Чарли выше не сработал для меня в Cygwin (версия сортировки 2.0, GNU textutils), а следующий:

sort -t"," -k2 -k1 -k1
21 голосов
/ 05 января 2015

Предположим, у вас есть еще одна строка 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.

0 голосов
/ 25 февраля 2016

.. и если кто-то следовал решению «сортировать», но теперь хочет получить больше, чем одну уникальную запись в строке (т. Е. Верхнее число уникальных записей), как только вы отсортировали файл с помощью «сортировки», Вы можете использовать небольшое приложение, которое я создал здесь:

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

...