.bat incémenter un compteur

Résolu
kimojo Messages postés 402 Statut Membre -  
dubcek Messages postés 18786 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai trouvé ce script sur le forum :
In fait en quelque sort un uniq sur le fichier f1.

$ type f1.txt
Group = toto, nom = toto, ville = paris
Group = titi, nom = titi, ville = lille
Group = toto, nom = toto, ville = paris
Group = tata, nom = tata, ville = toulouse

$ type bb.bat
@echo off

copy /Y NUL z1 > NUL
set i=-1
for /f "tokens=4 delims==," %%a in ('type f1.txt') do (
set/a i+=1
echo/%%a >> z1)

set dest=z2
copy /Y NUL %dest% > NUL
for /F %%n in ('type z1') do (
findstr %%n %dest% > NUL
if errorlevel 1 echo %%n >> %dest%)
type z2

Admettons que f1 se transforme en :

$ type f1.txt
Group = toto, nom = toto, ville = paris, voyage=2
Group = titi, nom = titi, ville = lille, voyage=5
Group = toto, nom = toto, ville = paris, voyage=4
Group = tata, nom = tata, ville = toulouse, voyage=3

Comment obtenir ça :

toto 6
titi 5
tata 3

Merci
A voir également:

24 réponses

dubcek Messages postés 18786 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
parce qu'en spécifiant : comme séparateur, 2h:07m:50s n'est plus un seul champ mais 3, il ne faut plus utiliser split, mais sub pour enlever les lettres h, m ou s des champs 10, 11 et 12.
avec sub, je substitue la lettre entre " par rien "" et je n'ai plus de tableau t

$ type f1.awk
{x[$4]+=$8; y[$4]+=$14; sub("h","",$10); sub("m", "", $12);sub("s","",$12); h[$4]+=$10;m[$4]+=$11;s[$4]+=$12} ;
END {for (n in x) { s1=s[n]%60 ; s2=int(s[n]/60); m1=(m[n]+s2)%60;m2=int((m[n]+s2)/60);h1=h[n]+m2;
print n, x[n], y[n], h1"h",m1"m",s1"s"}}

$ gawk -F"[,=:]" -f f1.awk < f3.txt
tata 3 7 4h 16m 11s
toto 6 9 5h 9m 9s
titi 5 3 2h 7m 50s
0
kimojo Messages postés 402 Statut Membre 41
 
Merci bien ça marche super bien.
Je te remercie pour tout le temps que tu as passé.
0
kimojo Messages postés 402 Statut Membre 41
 
J'ai testé en retirant : sub("h","",$10); sub("m", "", $11);sub("s","",$12);

Pour n'avoir que ça :
{x[$4]+=$8; y[$4]+=$14; h[$4]+=$10;m[$4]+=$11;s[$4]+=$12} ;
END {for (n in x) { s1=s[n]%60 ; s2=int(s[n]/60); m1=(m[n]+s2)%60;m2=int((m[n]+s2)/60);h1=h[n]+m2;
print n, x[n], y[n], h1"h",m1"m",s1"s"}}

Du coup le sub n'a pas forcément une utilité si ?
0
dubcek Messages postés 18786 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
effectivement, ça marche, je pense que puisque gawk, à la différence d'un language de programmation, n'a pas des variables typées, il doit virer tout seul les caractères non numériques puisqu'on effectue une opération arithmétique h[$4]+=$10;
0