Bonjour,
J'ai un fichier My_file à 3 colonnes:
col1: de 1 à 8, col2: de 9 à 17,col3:de 18 à 48
(Typiquement: Nom, Prénom, Adresse)
Je cherche à avoir 2 fichiers : $Adr_file contenant la liste des adresses avec des numeros (Ids), et $Id_Adr_file contenant Nom, Prénom, et le Numéro (Id) correspondant.
Ce code marche à merveille, sauf que ça prend beacoup de temps(45 min) pour 17000 lignes
	
	| 12
 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
 34
 35
 36
 37
 38
 39
 40
 41
 
 |  
awk ' {var1=substr($0,17,30);
	printf("%s",var1)
	printf( "\n" )
} ' $My_file > TEMP1
 
# remove duplicates
sort -o $Adr_file TEMP1
uniq $Adr_file > TEMP
 
if [ -f TEMP2 ]
then
	rm TEMP2
fi
 
#Cette partie est celle qui consomme beacoup de temps
while read line
do
adresse=`expr substr "$line" 17 30`
p_id=`grep -x -n "$adresse" TEMP | cut -f1 -d ":"`
 
printf "%-3s %s" $p_id >> TEMP2 
echo $line >> TEMP2
 
done < $My_file
 
if [ -f $Adr_file ]
then
	rm $Adr_file
fi
 
i=1
while read line
do
printf "%-3s %s" $i>> $Adr_file 
echo $line >> $Adr_file
i=$(expr $i + 1 )
done < TEMP
 
#ce awk file va simplement virer la colonne adresses du fichier final
awk -f adresse.awk TEMP2 > $Id_Adr_file | 
 Quelqu'un a une idée pour améliorer la logique??
Merci
Partager