Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1453 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [AWK] Resultat different sur deux OS differents, je vois pas le bug

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[AWK] Resultat different sur deux OS differents, je vois pas le bug

n°338335
YupYup
Non.
Posté le 20-03-2003 à 11:47:22  profilanswer
 

Hello,
 
J'ai un probleme tout a fait mystique : j'ai developpe un script AWK sur un Linux 2.4.20, et il fonctionne parfaitement. Le souci, c'est que des que je l'envoie sur un HP-UX, il y a un tout petit bug qui foire toute ma sortie, explication :
 
En gros le script remplace des caracteres suivant des conditions precises dans un fichier de 1000 lignes environ.
Voici les fichiers en cause sous Linux :
 

[11:36][yom@rocky][~/LDCom/BMP2/Scripts] wc -c FieldValid-Correction.awk              
   1013 FieldValid-Correction.awk
[11:37][yom@rocky][~/LDCom/BMP2/Scripts] wc -c reprise.TOTALE  
 268464 reprise.TOTALE
[11:37][yom@rocky][~/LDCom/BMP2/Scripts] ./FieldValid-Correction.awk < reprise.TOTALE |wc -c      
 197064

On voit bien le nombre de caracteres produits en sortie. Voici maintenant les memes fichiers, et les memes manips, quand on les execute sous HP-UX :
 

bmpadma@ehptbmp2 > wc -c FieldValid-Correction.awk                  
1013 FieldValid-Correction.awk
bmpadma@ehptbmp2 > wc -c reprise.TOTALE                              
268464 reprise.TOTALE
bmpadma@ehptbmp2 > FieldValid-Correction.awk < reprise.TOTALE |wc -c
197892

Voila.
 
J'ai donc recherche ou se situait la difference de taille entre les sorties, et voici ce que j'ai trouve : l'un des champs traites par le script est aggrandi sous HP-UX ! :
 
Linux:

60604 20030312 210309 00006 00006 00011 0 100052072 00 003 XXXXXXXX32649.... 000 XXXXXXXXXXXXXXXXX 117 XXXXX05607367.... 117 XXXXX05607367.... 00 1 10 LD 00393-03596                           HM02BI                           XD34SS 00000


 
HP-UX:

60604 20030312 210309 00006 00006 00011 0 100052072 00 003 XXXXXXXXX32649.... 000 XXXXXXXXXXXXXXXXX 117 XXXXX05607367.... 117 XXXXX05607367.... 00 1 10 LD 00393-03596                           HM02BI                           XD34SS 00000


(je precise que j'ai remplace par des . certaines informations confidentielles, histoire de pas avoir de problemes)
 
Comme on le voit, le script a ajoute un X a la colonne n.11
Le probleme, c'est que le script utilise la meme fonction pour traiter les colonnes 11, 13, 15 et 17, et que c'est uniquement la colonne 11 qui est touchee.
 
Si un genie pouvait donc m'orienter, ca m'aiderait beaucoup. Voici le code complet du script :
 

#!/usr/bin/awk -f
 
BEGIN {}
{
num1 = $11
num2 = $13
num3 = $15
num3nat = $14
num4 = $17
num4nat = $16
 
num1 = repair($10,$11)
num2 = repair($12,$13)
num3 = repair($14,$15)
num4 = repair($16,$17)
 
if (num1 == "Broken" || num2 == "Broken" || num3 == "Broken" || num4 == "Broken" ) {
} else {
        print substr($0,0,60) num1 substr($0,77,5) num2 substr($0,99,5) num3 substr($0,121,5) num4 substr($0,143)
}
}
END {}
function repair(nature,field)
{
if (field == "XXXXXXXXXXXXXXXXX" ) {
        return field;
}
if (nature == "003" || nature == "116" ) {
        minlength = 5
} else if (nature == "004" || nature == "117" ) {
        minlength = 6
} else {
        return "Broken";
}
for (i = 1; i < 18 ; i ++) {
        digit = substr(field, i, 1)
        if (digit == "X" ) {
                last = "X"
        } else if (digit <= 9 && digit >= 0) {
                if (last == "X" ) {
                        start = 1
                        last = digit
                } else {
                        start ++
                }
        } else if (start <= minlength) {
                return "Broken";
        } else if (start > minlength) {
                field = substr(field, 1, i-1)"0"substr(field,i+1,18)
        }
}
return field  
}


 
Merci d'avance pour l'aide des plus vaillants qui ont suivi jusqu'au bout ;)


Message édité par YupYup le 20-03-2003 à 11:51:49
mood
Publicité
Posté le 20-03-2003 à 11:47:22  profilanswer
 

n°338355
bobuse
Posté le 20-03-2003 à 12:02:36  profilanswer
 

J'ai pas lu ton source en entier, mais essaye gawk a la place de awk ...
Je te dis ca paske sur Sun, et ben make, awk, ... foirent par contre gmake, gawk marche nickel, alors je sais pas si ca vient de la config de nos admin ou de la distrib ... mais si ca peut t'aider


---------------
get amaroK plugin
n°338358
YupYup
Non.
Posté le 20-03-2003 à 12:05:19  profilanswer
 

Oui je me doutais que ca venait de la. Le probleme c'est que je n'ai pas les droits d'admin sur la machine et que ca va etre tres difficile de faire installer ca la-dessus. Menfin s'il n'y a pas d'autre solution, je ferai un second script qui corrige la sortie du premier :/

n°338507
vimaster
i love vi editor it&#039;s the best
Posté le 20-03-2003 à 14:18:34  profilanswer
 

je suis pas super a l'aise avec awk mais on m'a effectivement dit que chaque fois que c'est possible utiliser gawk au lieu de awk parceque certains systemes ont des AWK anciens pas tout a fait optimisés et d'autres des awk modernes aussi bons que gawk...
 


---------------
I love vi editor. it's the best one.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [AWK] Resultat different sur deux OS differents, je vois pas le bug

 

Sujets relatifs
Comment afficher le resultat d'une opération en flotantplusieurs boutons submit d'un form qui ont différents targets...
comment est ce que je pe detecter si le resultat d'1 requete est videMySql : like puis différence de résultat
AWK sous Unix[Php/Apache] Cryptage MD5 différent ??
pourquoi je vois pas les applet java sur mon poste[Php/MySQL] Bp retour à la ligne sur resultat requete
[Servlet] Un timer partagé entre différent servlets...Un liens différents ?
Plus de sujets relatifs à : [AWK] Resultat different sur deux OS differents, je vois pas le bug


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR