GNU/Linux >> Tutoriales Linux >  >> Linux

Ordenar en el último campo de una línea

awk '{print $NF,$0}' file | sort | cut -f2- -d' '

Básicamente, este comando hace:

  1. Repita el último campo al principio, separado por un espacio en blanco (OFS predeterminado)
  2. Ordenar, resolver los nombres de archivo duplicados usando la ruta completa ($0) para ordenar
  3. Cortar el primer campo repetido, f2- significa desde el segundo campo hasta el último

Una sola línea en perl para invertir el orden de los campos en una línea:

perl -lne 'print join " ", reverse split / /'

Puede usarlo una vez, canalizar la salida para ordenar, luego canalizarlo de nuevo y logrará lo que desea. Puedes cambiar / / a / +/ por lo que aprieta espacios. Y, por supuesto, puede usar cualquier expresión regular que desee para dividir las líneas.


algo como esto

awk '{print $NF"|"$0}' file | sort -t"|" -k1 | awk -F"|" '{print $NF }'

Aquí hay una línea de comando de Perl (tenga en cuenta que su shell puede requerir que escape del $ s):

perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} <>"

Simplemente canalice la lista o, si la lista está en un archivo, coloque el nombre del archivo al final de la línea de comando.

Tenga en cuenta que esta secuencia de comandos en realidad no cambia los datos, por lo que no debe tener cuidado con el delimitador que utiliza.

Aquí hay una salida de muestra:

>perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} " files.txt
/a/e/f/g/h/01-do-this-first
/a/b/c/10-foo
/a/b/c/20-bar
/a/d/30-bob
/a/b/c/50-baz
/a/e/f/g/h/99-local

Linux
  1. 8 consejos para la línea de comandos de Linux

  2. ¿Eliminar líneas consecutivas en Csv con valores duplicados en un campo, pero conservar la última línea?

  3. ¿Saltar al comienzo de la línea en el modo Vi de Bash?

  4. Imprimir la última línea de un archivo, desde la CLI

  5. Ordenando en bash

Domina la línea de comandos de Linux

¿Ordenar pero mantener la línea de encabezado en la parte superior?

¿Reemplazar todas las líneas nuevas al espacio excepto la última?

¿Encontrar el último elemento en una línea usando Grep?

¿Adjuntar el texto coincidente a la línea?

Ordenar un archivo delimitado por tabulaciones