Eu tenho um arquivo de duas colunas; o arquivo está classificado da maneira que eu quero na coluna 1. Gostaria de classificar na coluna 2, dentro de cada categoria da coluna 1. No entanto, sort
não entende a ordem de classificação da coluna 1.
A maneira normal (a partir de perguntas semelhantes aqui na pilha) seria esta:
sort --stable -k1,1 -k2,2n
Mas não posso especificar a classificação no k1, porque é arbitrário.
Exemplo de entrada:
C 2
C 1
A 2
A 1
B 2
B 1
e saída:
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
Você pode usar uma transformação Schwartziana (essa é basicamente a abordagem decorar-classificar-não-decorada a que você aludiu em um comentário, mas provavelmente com melhor desempenho do que a boa resposta de muru devido ao uso de uma única
sort
invocação em oposição a várias) - usandoawk
uma coluna de prefixo que incrementa com uma alteração no valor na primeira coluna, classifique pela coluna do prefixo seguida pela coluna "segunda" (cuja posição ordinal mudou temporariamente para3
devido à presença da coluna do prefixo) e, finalmente, livre-se da coluna do prefixofonte
awk -v OFS="\t" '$1 != prev { key++ } { print key, $0; prev = $1 }
(não testado).