Remplacer une colonne par ses numéros correspondants dans une liste
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:
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