Afficher les X dernier champs d'une ligne avec awk
Problème simple, imaginons que vous vouliez parser la sortie d’un “ls” mais garder seulement quelques champs dont tout les x derniers champs suivant le nombre de champs.
Dans l’exemple, imaginons une sortie de ls :
drwxr-xr-x 3 user groupe 4096 Jan 9 09:07 /var/pok/example avec des espaces
Pour l’exemple qui nous occupe, avec awk comment faire pour prendre le champs 1, 3 , 4 et tous ceux après 9 pour avoir le nom du fichier/répertoire entier ?
Simplement, avec des boucles de contrôle et l’utilisation de la variable interne awk NF (Number of Field).
Ce qui nous donnera :
awk '{ DIR = "" if (NF > 9) { for (i = 9; i<=NF;i++) { DIR=DIR" "$i } } else { DIR=$9 } printf("%s %s %s \n", $3, $4, DIR)}'
Brancher le awk sur un pipe (une sortie de find, au hasard!) ou un fichier et le tour est joué.