Unix сортировать несколько полей - PullRequest
15 голосов
/ 14 июня 2011

Я пытаюсь отсортировать файл ниже следующим образом:

col1 (По возрастанию) col2 (По убыванию) col3 (По возрастанию) col4 (По убыванию)

Я хочу использовать -k команда, а не синтаксис +-.Я понял, как использовать старый синтаксис:

sort -t " " +0 -1 +2 -3 +4r testfile

, но он вряд ли интуитивно понятен.Я не нашел правильный способ использования опции -k.Спасибо.

Вот тестовый файл:

5 3 2 9
3 4 1 7
5 2 3 1
6 1 3 6
1 2 4 5
3 1 2 3
5 2 2 3

Результат:

1 2 4 5
3 4 1 7
3 1 2 3
5 3 2 9
5 2 2 3
5 2 3 1
6 1 3 6

Ответы [ 2 ]

28 голосов
/ 14 июня 2011

Вам нужен один из:

sort --key=1,1 --key=2,2r --key=3,3 --key=4,4r
sort -k1,1 -k2,2r -k3,3 -k4,4r

как в следующей расшифровке:

pax$ echo '5 3 2 9
3 4 1 7
5 2 3 1
6 1 3 6
1 2 4 5
3 1 2 3
5 2 2 3' | sort --key=1,1 --key=2,2r --key=3,3 --key=4,4r

1 2 4 5
3 4 1 7
3 1 2 3
5 3 2 9
5 2 2 3
5 2 3 1
6 1 3 6

Не забудьте указать параметр -n, если вы хотите, чтобы они обрабатывались как правильные числа (переменной длины), например:

sort -n -k1,1 -k2,2r -k3,3 -k4,4r
0 голосов
/ 14 июня 2011

Как насчет sort -n -k 1n -k 2rn -k 3n -k 4rn?
-k <FIELD><OPT1><OPT2>..., где OPT1 и OPt2 - это просто sort опции, например, n - это число, r - это обратное

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...