Bonjour et Bienvenue,
En effet, il y a du boulot de ton coté pour comprendre comment fonctionne awk, je te suggère de compulser un tutoriel sur le sujet...
Pour faire simple:
-awk, n'est pas un shell, donc on ne lui dit pas de lancer des commande comme sed.
-il a un esprit d'automate pour traiter un flux (comme un fichier, par exemple) par défaut ligne par ligne: il lit une ligne, il execute les différentes étape, puis recommence avec la ligne suivante... ceci pour dire que ta boucle for n'a pas lieu d'être. Ici ça peut fonctionner car tu redéfini la variable RS qui est le Record Separator (un record est une ligne entière, dont le séparateur par défaut est le newline ( \n ).
Toi, ce qui t'interesse ce sont les champs (Fields) d'une ligne et la variable qui gère la séparation de champs est FS (Field Separator).
Comme awk lit un fichier ligne par ligne (comme un grand), il est inutil de connaitre le nombre de ligne d'un fichier au préalable pour traiter chaque ligne une à une.
De ce que je comprends, tu veux afficher les Field 3,4,5,6 de chaque ligne déterminée par la valeur du dernier Field.
Et ce qui est bien en awk, c'est qu'il existe une variable qui contient le nombre de fields que possède la ligne en cours (variable NF)
on peut donc le faire simplement (pas testé) :
awk -vVAR=12 '$NF == VAR {print $3,":",$4,$5,":",$6}' fichier
ou la méthode sauvage:
awk -vVAR=12 '$NF == VAR && $0=$3" : "$4" "$5" : "$6' fichier
Les 2 commandes awk traiteront la totalité du fichier mais la simplicité de l'algorithme considère que toutes les lignes du fichier ont exactement le même format.
Partager