Unix сортировать несколько полей
Я пытаюсь отсортировать файл ниже:
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
Ответы
Ответ 1
Вам нужен один из:
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
Ответ 2
Что насчет sort -n -k 1n -k 2rn -k 3n -k 4rn
?
-k <FIELD><OPT1><OPT2>...
, где OPT1 и OPt2 являются просто параметрами sort
, например n
является числовым, r
является обратным