Eu tenho um arquivo de texto com 3 colunas separadas por: como classificar a segunda coluna pelos 2 últimos dígitos da coluna 2?

Eu tenho um arquivo de texto com 3 colunas separadas por: como classificar a segunda coluna pelos 2 últimos dígitos da coluna 2?

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,2ninstruções sortpara usar o segundo campo, do caracter 4 em diante (é isso que .4faz) até o final do campo como chave de classificação, e para classificar a entrada numericamente nessa chave (a ndo 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 sorte sorto 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.

informação relacionada