classificando em duas colunas verticais

1

Eu tenho um arquivo que eu quero classificar da enésima coluna (que é numérica) - não o enésimo campo. O arquivo parece esquematicamente como:

1 Here are four words       9 8 5 
2 Here's two                7 2 6
3 One 2 3                  10 3 7
4 Guess how many are here   9 4 8
123456789012345678901234567890123

(onde a última linha é apenas um contador para maior clareza). O bom pessoal do stackexchange me mostrou que eu preciso de algo como sort -k1.27 , o qual quase faz o que eu quero.

No entanto, onde há empates inicialmente (como nas linhas 1 e 4 acima; ambos "9"), o sort volta ao início do campo, classificando a linha 1 antes da linha 4 neste caso (porque "1" vem antes de "4"); Considerando que o que eu preciso é um tipo começando no campo 1.27 (ou seja, um que classifica "9 4" antes de "9 8").

Eu tentei sort -g -k1.27,1.34 [e sort -g -k1.27,34 ] mas o argumento extra não tem efeito evidente ... alguma idéia?

    
por ionh 26.02.2016 / 16:59

1 resposta

4

Você pode definir várias chaves de classificação :

sort -k1.27n -k1.30n

Para empates, o fall-back é uma comparação léxica das linhas completas.

sort -k 1.27,1.34 definiria uma chave que consiste na parte da linha entre o 27º e o 34º caractere do primeiro campo. No entanto, com -g , isso indica a sort para considerar essa chave como numérica, então qualquer coisa após o primeiro não dígito seria ignorada.

Note que com -k1.27 , a chave é definida como começando no 27º caractere do primeiro campo e terminando no final da linha . Com n , apenas a parte numérica inicial é considerada.

    
por 26.02.2016 / 17:24