Aider à améliorer mes compétences AWK

Ce programme fonctionne comme je l'avais prévu, mais j'ai l'printing d'avoir utilisé des methods maladroites pour get le résultat que je désirais (surtout avec l'utilisation de commands d'printing et de déclarations de variables)

Quelqu'un pourrait-il améliorer ce script pour que je puisse voir où je pourrais m'améliorer?
Est-ce que quelqu'un veut me montrer une version délirante de ça?
Définit des variables dans le bloc BEGIN qui "exécute chaque ligne! @ #! # @!" comment vous êtes censé définir une variable dans AWK?

#!/usr/bin/awk -f BEGIN{ FS=","; recordsCursor=1; number=0; #spacer="_"; #copys=3; } { while(number++ <=copys){ while(recordsCursor <= NF){ if(recordsCursor==1){ printf($recordsCursor); printf(spacer); printf("%.3d,",number); }else if(NF != recordsCursor){ printf("%s," , $recordsCursor); }else{ printf("%s" , $recordsCursor); } recordsCursor++; } recordsCursor=1; print ""; } print ""; number=0; } 
 Command: ./test.awk -v copys=3 -v spacer=_ input 

Compte tenu des commentaires:

 madison_Leaderboard_728x90,728x90,Leaderboard ads for Madison,no,,,,,,,_blank,image,web madison_Bullseye_300x250,300x250,Bullseye ads for Madison,no,,,,,,Bullseye,_blank,image,web madison_Button_155x155,155x155,Button ads for Madison,no,,,,,,,_blank,image,web 

Sortie correcte:

 madison_Leaderboard_728x90_001,728x90,Leaderboard ads for Madison,no,,,,,,,_blank,image,web madison_Leaderboard_728x90_002,728x90,Leaderboard ads for Madison,no,,,,,,,_blank,image,web madison_Leaderboard_728x90_003,728x90,Leaderboard ads for Madison,no,,,,,,,_blank,image,web madison_Leaderboard_728x90_004,728x90,Leaderboard ads for Madison,no,,,,,,,_blank,image,web madison_Bullseye_300x250_001,300x250,Bullseye ads for Madison,no,,,,,,Bullseye,_blank,image,web madison_Bullseye_300x250_002,300x250,Bullseye ads for Madison,no,,,,,,Bullseye,_blank,image,web madison_Bullseye_300x250_003,300x250,Bullseye ads for Madison,no,,,,,,Bullseye,_blank,image,web madison_Bullseye_300x250_004,300x250,Bullseye ads for Madison,no,,,,,,Bullseye,_blank,image,web madison_Button_155x155_001,155x155,Button ads for Madison,no,,,,,,,_blank,image,web madison_Button_155x155_002,155x155,Button ads for Madison,no,,,,,,,_blank,image,web madison_Button_155x155_003,155x155,Button ads for Madison,no,,,,,,,_blank,image,web madison_Button_155x155_004,155x155,Button ads for Madison,no,,,,,,,_blank,image,web 

 awk -v copys=3 -v spacer=_ ' BEGIN {OFS=FS=","} { field1 = $1 for (i=1; i <= copys+1; i++) { $1 = sprintf("%s%s%03d", field1, spacer, i) print } print "" } ' 

Cela profite de awk recalculant $ 0 si l'un des champs change de valeur.