Tengo un archivo de texto con 3 columnas separadas con: ¿cómo ordenar la segunda columna por los últimos 2 dígitos de la columna 2?

Tengo un archivo de texto con 3 columnas separadas con: ¿cómo ordenar la segunda columna por los últimos 2 dígitos de la columna 2?

Este es un ejemplo del archivo de texto:

195.92.211.47:21029:400
195.92.211.48:21023:400

¿Cómo puedo ordenar las líneas del archivo por los últimos 2 dígitos de la segunda columna? La segunda columna siempre tiene cinco dígitos.

Respuesta1

Suponiendo que el segundo :campo delimitado siempre contiene cinco dígitos:

$ sort -t ':' -k2.4,2n file
195.92.211.48:21023:400
195.92.211.47:21029:400

Indica usar el segundo campo, desde el carácter 4 en adelante (eso es lo que hace -k2.4,2n) hasta el final del campo como clave de clasificación, y ordenar la entrada numéricamente en esa clave (la del final). Para ordenar numéricamente porsort.4nenterosegundo campo, habrías usado -k2,2n. Solemos -t ':'decir que los campos están delimitados por dos puntos.

Puedes ver que está usando los números correctos para ordenar si ejecutas el comando con --debug(aquí se muestra tanto GNU sortcomo sorten 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

Respuesta2

Usarsort -t: -nk2.4

-t uses the delimiter :
-n for numerical sort
-k your key is the second column

Las definiciones clave están muy bien explicadas en info sort.

'-k POS1[,POS2]'

'--clave=POS1[,POS2]'

Especifique un campo de clasificación que consta de la parte de la línea entre POS1 y POS2 (o el final de la línea, si se omite POS2), inclusivo.

Cada POS tiene el formato 'F[.C][OPTS]', donde F es el número del campo a utilizar y C es el número del primer carácter desde el inicio del campo. Los campos y las posiciones de los caracteres están numerados comenzando con 1; una posición de carácter cero en POS2 indica el último carácter del campo. Si se omite '.C' en POS1, el valor predeterminado es 1 (el comienzo del campo); si se omite en POS2, el valor predeterminado es 0 (el final del campo). OPTS son opciones de ordenación que permiten ordenar claves individuales según diferentes reglas; consulte a continuación para obtener más detalles. Las claves pueden abarcar varios campos.

Ejemplo: para ordenar en el segundo campo, use '--key=2,2' ('-k 2,2'). Consulte a continuación para obtener más notas sobre claves y más ejemplos. Consulte también la opción '--debug' para ayudar a determinar la parte de la línea que se utiliza en la clasificación.

información relacionada