GNU/Linux >> Linux Esercitazione >  >> Linux

Ordinamento sull'ultimo campo di una riga

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

Fondamentalmente, questo comando fa:

  1. Ripeti l'ultimo campo all'inizio, separato da uno spazio bianco (OFS predefinito)
  2. Ordina, risolvi i nomi di file duplicati utilizzando il percorso completo ($0) per l'ordinamento
  3. Taglia il primo campo ripetuto, f2- significa dal secondo campo all'ultimo

Un one-liner in perl per invertire l'ordine dei campi in una riga:

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

Potresti usarlo una volta, reindirizzare l'output per ordinare, quindi reindirizzarlo e otterresti ciò che desideri. Puoi cambiare / / a / +/ quindi stringe gli spazi. E sei ovviamente libero di usare qualunque espressione regolare tu voglia dividere le righe.


qualcosa di simile

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

Ecco una riga di comando Perl (nota che la tua shell potrebbe richiedere l'escape di $ s):

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

Basta reindirizzare l'elenco al suo interno o, se l'elenco è in un file, inserire il nome del file alla fine della riga di comando.

Nota che questo script in realtà non modifica i dati, quindi non devi stare attento a quale delimitatore usi.

Ecco un esempio di output:

>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. Ordinare ma mantenere la riga di intestazione in alto?

  2. Elimina le righe consecutive in Csv con valori duplicati in un campo, ma mantieni l'ultima riga?

  3. Trovare l'ultimo elemento di una riga usando Grep?

  4. Vai all'inizio della linea nella modalità Vi di Bash?

  5. Aggiungere il testo abbinato alla riga?

Avere una mucca sulla riga di comando di Linux

Entra nella riga di comando di Linux

Padroneggia la riga di comando di Linux

Stampa l'ultima riga di un file, dalla CLI

Ordinamento in bash

Come stampare l'ultima riga di un file compresso gz nella riga di comando?