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