GNU/Linux >> Tutoriels Linux >  >> Linux

Tri sur le dernier champ d'une ligne

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

En gros, cette commande fait :

  1. Répéter le dernier champ au début, séparé par un espace (OFS par défaut)
  2. Trier, résoudre les noms de fichiers en double en utilisant le chemin complet ($0) pour le tri
  3. Couper le premier champ répété, f2- signifie du deuxième champ au dernier

Une ligne en perl pour inverser l'ordre des champs dans une ligne :

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

Vous pouvez l'utiliser une fois, diriger la sortie pour trier, puis la rediriger et vous obtiendrez ce que vous voulez. Vous pouvez modifier / / à / +/ donc ça comprime les espaces. Et vous êtes bien sûr libre d'utiliser l'expression régulière de votre choix pour diviser les lignes.


quelque chose comme ça

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

Voici une ligne de commande Perl (notez que votre shell peut vous demander d'échapper le $ s):

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

Il suffit de diriger la liste dedans ou, si la liste est dans un fichier, de mettre le nom du fichier à la fin de la ligne de commande.

Notez que ce script ne modifie pas réellement les données, vous n'avez donc pas à faire attention au délimiteur que vous utilisez.

Voici un exemple de sortie :

>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. Supprimer des lignes consécutives dans Csv avec des valeurs en double dans un champ, mais conserver la dernière ligne ?

  2. Trouver le dernier élément d'une ligne à l'aide de Grep ?

  3. Sauter au début de la ligne en mode Vi de Bash ?

  4. Ajouter le texte correspondant à la ligne ?

  5. Trier un fichier délimité par des tabulations

8 conseils pour la ligne de commande Linux

Maîtrisez la ligne de commande Linux

Compter les caractères de chaque ligne avec Wc ?

Trier mais garder la ligne d'en-tête en haut ?

Remplacer toutes les nouvelles lignes par un espace sauf la dernière ?

Imprimer la dernière ligne d'un fichier, à partir de la CLI