Ответ 1
sort --field-separator=';' --key=2,1,3
У меня есть файл 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
Я хотел бы знать, как получить этот же результат, используя команду sort для Unix.
sort --field-separator=';' --key=2,1,3
Ответ Charlie выше не работал у меня на Cygwin (sort version 2.0, GNU textutils), следующее:
sort -t"," -k2 -k1 -k1
Предположим, что у вас есть еще одна строка 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
.
.., и если кто-то последует за решением "sort", но теперь хочет получить больше, чем единственная уникальная запись в строке (то есть верхний номер X уникальных записей), как только вы отсортировали файл, используя "sort", вы можете использовать небольшое приложение, которое я создал здесь:
https://github.com/danieliversen/MiscStuff/blob/master/scripts/findTopUniques.java