Awk : problème avec printf

Bonjour,

j'ai un code d'erreur sur l'affichage de resultats avec le printf

BEGIN { FS=","
#OFMT="%.2f"

print "-----HANDOVER INTER MSC----- \n"," Date Heure Target MSC Succ_Inter_MSC_inc Succ_Inter_MSC_out\n"
}

$7+$15) > 0 {
printf " %14s %12s %12.2f %.2f\n", "20" substr($1,1,2) "-" substr($1,3,2) " " substr($1,7,2) ":" substr($1,9,2) ,
$2 , (($9+$17) / ($7+$15)) *100
{ if (($3 + $19) > 0) {printf ("%.2f\n", ((($5+$21) / ($3+$19)) *100))} else { printf("%.2f\n",0) }}
}

# cela me sert à mettre un zéro dans ce calcul afin d'éviter de faire une division par 0
{ if (($3 + $19) > 0) {printf ("%.2f\n", ((($5+$21) / ($3+$19)) *100))} else { printf("%.2f\n",0) }}

en lancant gawk -f nbrmsclst_kpi.awk NBRMSCLST.data

j'obient l'erreur suivante

gawk: nbrmsclst_kpi.awk:7: (FILENAME=NBRMSCLST.data FNR=1) fatal : pas assez d'arguments pour satisfaire la chaîne de formatage
' %14s %12s %12.2f %.2f
'
^ à court pour celui-ci

merci pour votre support

4 réponses

  1. salut,

    printf " %14s %1
    etc

    Il manque des parenthèses
    1. j'ai refait avec des paranthèses , c'est pire :-(
      BEGIN { FS=","
      #OFMT="%.2f"

      print "-----HANDOVER INTER MSC----- \n"," Date Heure Target MSC Succ_Inter_MSC_inc Succ_Inter_MSC_out\n"
      }

      ($7+$15) > 0 {
      printf (" %14s %12s %12.2f %.2f\n", "20" substr($1,1,2) "-" substr($1,3,2) " " substr($1,7,2) ":" substr($1,9,2) ,
      $2 , (($9+$17) / ($7+$15)) *100 ,
      { if (($3 + $19) > 0)
      {printf ("%.2f\n", ((($5+$21) / ($3+$19)) *100))}
      else
      { printf("%.2f\n",0)}
      )
      }
      }

      le fichier que je traite à la forme suivante

      1212310700134,CHAMBNG,13,1,13,1,9,1,8,1,5,1,5,1,33,1,28,1,8,1,8,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,14,1,9,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,VELIZNG,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,LYPRENG,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,MONANG,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,FMBEZNG,0,1,0,1,0,1,0,1,0,1,0,1,36,1,34,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,FMONTNG,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,ARGENBC,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,BORDEBC,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,BORDENG,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,CHELLNG,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,SOUSTNG,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,VANDONG,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,STEGENG,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,BEAUJNG,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,NAVARNG,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,AMIENNG,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1212310700134,LYONNG,39,1,39,1,12,1,12,1,6,1,6,1,72,1,69,1,25,1,25,1,0,1,0,1,0,0,0,0,2,1,2,1,0,1,0,1,0,1,0,1,3,1,2,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
      1. Tu fais des printf dans un printf ?

        Avec des conditions entre accolades ?

        Tu devrais utiliser un opérateur ternaire.
        test ? alors : sinon


        Par soucis de lisibilité, tu devrais affecter des variables avec les valeurs que tu veux afficher, plutôt que d'afficher les calculs.
        1. Contributeur
          hello
          il manque une valeur, le printf en veut 4, il y en a 3
          printf " %14s %12s %12.2f %.2f\n"   
          , "20" substr($1,1,2) "-" substr($1,3,2) " " substr($1,7,2) ":" substr($1,9,2) 
          , $2  
          , (($9+$17) / ($7+$15)) *100