Este é um exemplo do arquivo de texto:
195.92.211.47:21029:400
195.92.211.48:21023:400
Como posso classificar as linhas do arquivo pelos últimos 2 dígitos da segunda coluna? A segunda coluna tem sempre cinco dígitos.
Responder1
Supondo que o segundo :
campo delimitado sempre contenha cinco dígitos:
$ sort -t ':' -k2.4,2n file
195.92.211.48:21023:400
195.92.211.47:21029:400
As -k2.4,2n
instruções sort
para usar o segundo campo, do caracter 4 em diante (é isso que .4
faz) até o final do campo como chave de classificação, e para classificar a entrada numericamente nessa chave (a n
do final). Para classificar numericamente notodosegundo campo, você teria usado -k2,2n
. Costumamos -t ':'
dizer que os campos são delimitados por dois pontos.
Você pode ver que ele está usando os números corretos para classificação se executar o comando com --debug
(mostrando aqui o GNU sort
e sort
o OpenBSD):
$ gsort --debug -t ':' -k2.4,2n file
gsort: text ordering performed using simple byte comparison
195.92.211.48:21023:400
__
_______________________
195.92.211.47:21029:400
__
_______________________
$ sort --debug -t ':' -k2.4,2n file
Memory to be used for sorting: 2139060224
sort_method=heapsort
; k1=<23>, k2=<29>; s1=<195.92.211.48:21023:400>, s2=<195.92.211.47:21029:400>; cmp1=-1
195.92.211.48:21023:400
195.92.211.47:21029:400
Responder2
Usarsort -t: -nk2.4
-t uses the delimiter :
-n for numerical sort
-k your key is the second column
As principais definições são muito bem explicadas em info sort
.
'-kPOS1[,POS2]'
'--key=POS1[,POS2]'
Especifique um campo de classificação que consista na parte da linha entre POS1 e POS2 (ou no final da linha, se POS2 for omitido), inclusivo.
Cada PDV possui o formato 'F[.C][OPTS]', onde F é o número do campo a ser utilizado e C é o número do primeiro caractere do início do campo. Os campos e posições dos caracteres são numerados começando com 1; uma posição de caractere zero em POS2 indica o último caractere do campo. Se '.C' for omitido do POS1, o padrão é 1 (o início do campo); se omitido no POS2, o padrão é 0 (o final do campo). OPTS são opções de ordenação, permitindo que chaves individuais sejam classificadas de acordo com regras diferentes; veja abaixo para obter detalhes. As chaves podem abranger vários campos.
Exemplo: para classificar no segundo campo, use '--key=2,2' ('-k 2,2'). Veja abaixo mais notas sobre chaves e mais exemplos. Veja também a opção '--debug' para ajudar a determinar a parte da linha que está sendo usada na classificação.