У меня есть файл с двумя столбцами; файл отсортирован так, как я хочу, уже в столбце 1. Я хотел бы отсортировать по столбцу 2, в каждой категории столбца 1. Тем sort
не менее, не понимает порядок сортировки столбца 1.
Нормальный способ (из подобных вопросов здесь в стеке) будет такой:
sort --stable -k1,1 -k2,2n
Но я не могу указать сортировку по k1, потому что она произвольна.
Пример ввода:
C 2
C 1
A 2
A 1
B 2
B 1
и вывод:
C 1
C 2
A 1
A 2
B 1
B 2
seq 30 | xargs -L1 bash -cs 'yes $1 | head -1000000 | paste - <(seq 1000000) | shuf' bash
Вы могли бы использовать преобразование Шварца (это в основном подход decorate-sort-undecorate, на который вы ссылались в комментарии, но, вероятно, более производительный, чем хороший ответ muru из-за использования одного
sort
вызова в отличие от нескольких) - с помощьюawk
добавления столбца префикса, который увеличивается с изменением значения в первом столбце, сортируется по столбцу префикса, за которым следует «второй» столбец (порядковый номер которого временно смещен3
из-за наличия столбца префикса), и, наконец, избавляется от столбца префиксаисточник
awk -v OFS="\t" '$1 != prev { key++ } { print key, $0; prev = $1 }
(не проверено).