Используя команду сортировки, в то время как строки в первом столбце повторяются
У меня есть файл данных следующим образом;
ALIC 5.55 2.65 3.45
ALIC 2.56 2.78 3.99
AMC4 3.55 3.66 4.88
AMC4 3.00 3.67 4.78
ALIC 1.00 1.00 1.00
ALIC 0.95 1.00 1.00
AMC4 0.50 1.00 1.00
AMC4 0.01 1.00 1.00
Мне нужно отсортировать эти строки по строкам в первом столбце следующим образом;
ALIC 5.55 2.65 3.45
ALIC 2.56 2.78 3.99
ALIC 1.00 1.00 1.00
ALIC 0.95 1.00 1.00
AMC4 3.55 3.66 4.88
AMC4 3.00 3.67 4.78
AMC4 0.50 1.00 1.00
AMC4 0.01 1.00 1.00
Но когда я выполню sort -k 1 data
Я вижу, что числовые значения во втором столбце сортируются по возрастанию. Какая команда производит вышеуказанную сортировку?
2 ответа
Есть две вещи, которые вам нужно сделать.
Первый, sort -k 1
начинается с ключа 1, но по умолчанию останавливается в конце строки: для сортировки только по ключу 1 необходимо -k 1,1
Во-вторых, по умолчанию GNU sort
выполняет окончательную сортировку "последней инстанции" по всей строке - для подавления этого необходимо добавить --stable
вариант.
Так
$ sort --stable -k 1,1 data
ALIC 5.55 2.65 3.45
ALIC 2.56 2.78 3.99
ALIC 1.00 1.00 1.00
ALIC 0.95 1.00 1.00
AMC4 3.55 3.66 4.88
AMC4 3.00 3.67 4.78
AMC4 0.50 1.00 1.00
AMC4 0.01 1.00 1.00
Это отсортирует по первому столбцу в порядке возрастания (как обычно), а затем по второму столбцу в порядке убывания (в обратном порядке). Второй столбец интерпретируется как число:
$ sort -k 1,1 -k 2nr,2 < in.txt
ALIC 5.55 2.65 3.45
ALIC 2.56 2.78 3.99
ALIC 1.00 1.00 1.00
ALIC 0.95 1.00 1.00
AMC4 3.55 3.66 4.88
AMC4 3.00 3.67 4.78
AMC4 0.50 1.00 1.00
AMC4 0.01 1.00 1.00
Вы можете добавить --debug
флаг, чтобы увидеть, какие именно ключи sort
работает:
$ sort --debug -k 1,1 -k 2nr,2 < in.txt
ALIC 5.55 2.65 3.45
____
____
___________________
ALIC 2.56 2.78 3.99
____
____
___________________
ALIC 1.00 1.00 1.00
____
____
___________________
...