1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| #!/usr/bin/awk -f
BEGIN {
first_time = 1; # 1ere fois quon voit le separateur ? on pourrait sen passer, juste question de lisibilité...
}
{
line[cpt] = $0; # on stocke chaque ligne dans un tableau
}
/^[ \t]*$/ { # on zappe les lignes vides, mais on veut les garder pour affichage à la fin
cpt++;
next;
}
/^separateur/ { # si on voit le séparateur
if (first_time) { # si cest la première fois
first_time = 0;
} else { # sinon on modifie le séparateur précédent
line[last_sep] = line[last_sep] " " last_toto - first_titi;
}
state++
last_sep = cpt;
cpt++;
next;
}
state == 1 { # on récupère le premier titi du bloc
gsub(/[ \t]*;[ \t]*$/,"",$0);
first_titi = $(NF-1);
state = 0;
}
{ # sur les autres lignes on récupère toto, dernier arrivé = dernier toto du bloc
gsub(/[ \t]*;[ \t]*$/,"",$0);
last_toto = $NF;
cpt++;
}
END { # à la fin on affiche tout le fichier
line[last_sep] = line[last_sep] " " last_toto - first_titi; # on oublie pas de modifier la dernière ligne de séparateur
for(i = 0; i < cpt; i++) {
print line[i];
}
} |
Partager