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

Resultat different sur deux OS differents, je vois pas le bug [AWK] - Shell/Batch - Programmation

Marsh Posté le 20-03-2003 à 11:47:22    

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
Reply

Marsh Posté le 20-03-2003 à 11:47:22   

Reply

Marsh Posté le 20-03-2003 à 12:02:36    

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
Reply

Marsh Posté le 20-03-2003 à 12:05:19    

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 :/

Reply

Marsh Posté le 20-03-2003 à 14:18:34    

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.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed