Eu gostaria de classificar um arquivo, onde a chave de classificação é um número na segunda coluna, começando pelo 2º caractere desta coluna. Por exemplo:
4 31
5 a14
2 h11
1 x4
2 z3
E a saída desejada é:
4 31
2 z3
1 x4
2 h11
5 a14
Parece que sort -k
é um caminho a percorrer, mas não funciona como eu esperava.
k, --key=KEYDEF
classificar por meio de uma chave; KEYDEF dá localização e tipo
KEYDEF é F[.C][OPTS][,F[.C][OPTS]] para posição inicial e final, onde F é um número de campo e C uma posição de caractere no campo; ambos são origem 1, e a posição de parada padrão é o final da linha. Se nem -t nem -b estiverem em vigor, os caracteres em um campo serão contados a partir do início do espaço em branco anterior. OPTS é uma ou mais opções de ordenação de uma única letra [bdfgiMhnRrV], que substituem as opções de ordenação global para essa chave. Se nenhuma chave for fornecida, use a linha inteira como chave.
Tentei fazer assim:
sort -k 2.2V file
4 31
5 a14
2 h11
1 x4
2 z3
Como fazer do jeito certo?
Você está se deparando com isso:
dará o resultado que você procura: o espaço em branco que separa os campos é o primeiro caractere do segundo campo.
Como alternativa, você pode adicionar a
b
opção de ignorar espaços em branco à esquerda:Isso permite que a definição de chave funcione com qualquer número de espaços em branco antes do campo.