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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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