Bonjour , voila ce que j 'essaye de faire , j'ai un fichier sous cette forme
Fichier en entré : test.ai en format fixe sans séparateur
1 2 3 4 5 6
| 010020000000 L ABERGEMENT DE VAREY T 01640 1009
010040000000 AMBERIEU EN BUGEY T 01500
010040000100 BOISSIEU ALL ALLEE 0000 0000 0000 0000 015002005A 002206
010040000200 ETRAC ALL ALLEE 0000 0000 0000 0000 015001018A 002206
010040000300 BARBOTIERE ALL ALLEE 0000 0000 0000 0000 015001018B 002206
010040000500 PANISSETTE ALL ALLEE 0000 0000 0000 0000 015001018A 002206 |
Je veux vérifier pour chaque ligne de mon fichier si je trouve la valeur 'T' en colonne 71 et si en colonne 100 nous avons une valeur renseignée.
Par ex : si je prends la première ligne de mon fichier ci-dessus : j'ai bien la valeur T et en colonne 100 : la valeur 1009 donc c parfait
Si cette condition est vraie , je veux vérifier pour la ligne suivante l'absence de la valeur 'T' en colonne 71 . Or dans mon exemple j'ai en ligne 2, la colonne 71 qui est renseignée avec la valeur 'T' . J'aimerais récupérer dans mon fichier toutes les lignes qui ne remplisse pas ces conditions .
Le résultat de mon traitement serait donc que je pourrais stocker dans un fichier :
Résultat attendu :
010020000000 L ABERGEMENT DE VAREY T 01640 1009
J'ai écrit un code qui fonctionne mais du tout performant car avec la commande while à chaque fois je parcours tout le fichier , y a certainement bcp à faire , je n 'arrive pas à indiquer à la commande getline la ligne à partir de laquelle , il peut commencer à parcourir le fichier au lieu de recommencer à la premiere ligne
voici mon code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| awk ' {
ql=substr($0,100,4);
commune=substr($0,71,1);
ligne=$0;
i=i+1;
cpt=0;
commune1=0;
j=0;
if (commune=="T" && ql>0 )
{
while ((getline < "test.ai") > 0 )
{
j=j+1
# si la ligne du awk et egal à celle du while alors je mets mon variable a 1
if (ligne==$0)
{
cpt=1
}
# je recupere dans le while celle qui vient juste apres le awk pour recuperer la valeur
if (j==i+1){
commune1=substr($0,71,1);
}
# si la ligne n+1 du awk contient la valeur T en position 71 alors je l'affiche dans le fichier de sortie et j'arrete le while pour traiter la ligne suivante dans le awk
if (cpt==1 && commune1=="T")
{
print "ligne:" ligne
break
}
}
close ("test.ai")
}
}' test.ai > res.ai |
Partager