awk - redécouper les champs de la ligne courante
Bonjour, Dans un script awk, peut-on modifier FS et obliger awk à redécouper la ligne courante avec ces nouveaux séparateurs ? C'est pour avoir un 1er traitement avec un séparateur et un 2e traitement avec un autre séparateur. C'est possible ? question subsidiaire : on peut virer les dernier champs en diminuant NF, mais peut-on virer les premiers ? (on peut les remplir avec des chaines vides, mais $0 contient encore ces champs vides séparés par des espaces) Daniel PS: tout ça n'est pas important, je continue juste mon apprentissage sed/awk avec des exercices stupides (faut bien qu'une immobilisation serve à qqchose) ;-) PS2: la réécriture de $0 marche avec OFS (si on touche à NF avant le print) mais j'y arrive pas avec FS... exemple (merci Christophe Blaess et son bouquin "langages de script sous linux") : ls -l|awk '{print$0; OFS="#";print $0}' et ls -l|awk '{print$0; OFS="#";NF=NF;print $0}'
Daniel Caillibaud a écrit :
Bonjour,
Dans un script awk, peut-on modifier FS et obliger awk à redécouper la ligne courante avec ces nouveaux séparateurs ?
C'est pour avoir un 1er traitement avec un séparateur et un 2e traitement avec un autre séparateur. C'est possible ?
Pour info, j'ai pas trouvé mais j'ai contourné le pb avec la fonction split de awk, c'est nettement plus rapide que de lancer 2 exécution de awk (avec un FS différent) pour chaque ligne. match permet aussi de s'en sortir dans mon cas, mais n'est pas plus rapide que split. Daniel
participants (1)
-
Daniel Caillibaud