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é.