OVH Cloud OVH Cloud

[AWK] Recherche infos sur awk : comment soustraire infos de ligne 2 - infos ligne 1, en boucle.

2 réponses
Avatar
Claude
[AWK] Recherche infos sur awk : comment soustraire infos de ligne 2 - infos
ligne 1, en boucle.

[AWK] Recherche infos sur awk : comment soustraire infos de ligne 2 - infos
ligne 1, en boucle.

Bonjour, je chercher à faire une soustraction entre 2 durées une sur la
ligne 1, l'autre sur ligne 2 et ainsi de suite.

nom début fin
TRAITEMENT1 2050 2230
TRAITEMENT2 2230 2240
TRAITEMENT3 2240 2310
TRAITEMENT4 2330 2350

nom début fin durée
TRAITEMENT1 2050 2230
TRAITEMENT2 2230 2240 0150
TRAITEMENT3 2240 2310
TRAITEMENT4 2330 2350 0110

merci de vos conseils et de vos pistes à suivre, avec awk je peux des
opérations sur une ligne mais je ne sais pas comment faire
pour traiter 2 lignes ( avec une variable ? )

2 réponses

Avatar
Pascal Bourguignon
"Claude" writes:

[AWK] Recherche infos sur awk : comment soustraire infos de ligne 2 - infos
ligne 1, en boucle.

[AWK] Recherche infos sur awk : comment soustraire infos de ligne 2 - infos
ligne 1, en boucle.

Bonjour, je chercher à faire une soustraction entre 2 durées une sur la
ligne 1, l'autre sur ligne 2 et ainsi de suite.

nom début fin
TRAITEMENT1 2050 2230
TRAITEMENT2 2230 2240
TRAITEMENT3 2240 2310
TRAITEMENT4 2330 2350

nom début fin durée
TRAITEMENT1 2050 2230
TRAITEMENT2 2230 2240 0150
TRAITEMENT3 2240 2310
TRAITEMENT4 2330 2350 0110

merci de vos conseils et de vos pistes à suivre, avec awk je peux des
opérations sur une ligne mais je ne sais pas comment faire
pour traiter 2 lignes ( avec une variable ? )


Garder chaque ligne impaire en tampon.

awk '

function duree(debut,fin,local,...) {
...
return(duree);
}

function f(d1,f1,d2,f2,local,t1,t2) {
t1=duree(d1,f1);
t2=duree(d2,f2);
return(somme_duree(t1,t2));
}

{
if(NR%2==1){
t1=$1;d1=$2;f1=$3;
}else{
t2=$1;d2=$2;f2=$3;
printf "%-20s %4s %4sn%-20s %4s %4s %4s",t1,d1,f1,t2,d2,f2,
f(d1,f1,d2,f2);
}
}

'



--
__Pascal Bourguignon__ http://www.informatimago.com/

There is no worse tyranny than to force a man to pay for what he does not
want merely because you think it would be good for him. -- Robert Heinlein

Avatar
Stephane Chazelas
2004-06-20, 23:39(+02), Claude:
[AWK] Recherche infos sur awk : comment soustraire infos de ligne 2 - infos
[...]

nom début fin
TRAITEMENT1 2050 2230
TRAITEMENT2 2230 2240
TRAITEMENT3 2240 2310
TRAITEMENT4 2330 2350

nom début fin durée
TRAITEMENT1 2050 2230
TRAITEMENT2 2230 2240 0150
TRAITEMENT3 2240 2310
TRAITEMENT4 2330 2350 0110

merci de vos conseils et de vos pistes à suivre, avec awk je peux des
opérations sur une ligne mais je ne sais pas comment faire
pour traiter 2 lignes ( avec une variable ? )
[...]


Faut faire un getline pour recuperer la ligne suivante:

awk '/^TRAITEMENT/{
n=substr($2,1,2) * 60 + substr($2,3,2)
print
getline
n=substr($3,1,2) * 60 + substr($3,3,2) - n
$0 = $0 sprintf(" %.2d%.2dn", n/60, n%60)}
{print}'

--
Stephane