suppression doublons dans fichier texte

suppression doublons dans fichier texte - Shell/Batch - Programmation

Marsh Posté le 06-11-2009 à 18:25:01    

Bonjour à Tous,
 
J'ai regardé partout sur le net et sur ce forum afin de trouver ce que je cherche: les sujets sur des suppressions de doublons sont nombreux, trop peut être et j'avoue être perdu.
J'ai un fichier texte d'environ 3000 lignes:
"
HE                 0    10.200     2.576     0.000     0.000     0.000 ! *
AR                 0   136.500     3.330     0.000     0.000     0.000
A                  0   136.500     3.330     0.000     0.000     0.000
E                  0   850.        425.      0.000     0.000     1.000 ! singh
CL                 0   130.8       3.613     0.000     0.000     1.000 ! singh
CL-                0   130.8       3.613     0.000     0.000     1.000 ! singh
HCL                1   344.7       3.339     1.084     0.000     1.000 ! singh
F                  0    80.000     2.750     0.000     0.000     0.000
HF                 1   330.000     3.148     1.920     2.460     1.000 ! sv/mec
HF0                1   352.000     2.490     1.730     0.000     5.000
HF1                1   352.000     2.490     1.730     0.000     5.000
HF2                1   352.000     2.490     1.730     0.000     5.000
HF3                1   352.000     2.490     1.730     0.000     5.000
HF4                1   352.000     2.490     1.730     0.000     5.000
HF5                1   352.000     2.490     1.730     0.000     5.000
"
 
Dont voici un extrait. La première colonne représente des espèces chimiques, les autres des données associées à l'espèce en début de  ligne.
Le problème est que sur les 3000 lignes, il existe des espèces similaires avec quasi les mêmes propriétés.
Je voudrais donc détruire les lignes dont les espèces sont en double, triples etc, pour ne laisser qu'une seule ligne correspondant à une espèce sachant que le nom des espèces sont écrit sur les 18 premiers emplacements.
J'ai essayé des sort -u etc... mais rien ne marche.
 
Un peu d'aide serait la bienvenue.
Merci d'avance
Cordialement
 
Grogay

Message cité 1 fois
Message édité par Grogay le 06-11-2009 à 18:25:14
Reply

Marsh Posté le 06-11-2009 à 18:25:01   

Reply

Marsh Posté le 06-11-2009 à 18:34:08    

Grogay a écrit :


J'ai essayé des sort -u etc... mais rien ne marche.


Bien entendu. sort -u vérifie l'unicité de la ligne entière.
 
Ton fichier faut le passer par un filtre (en shell ou en ce que tu veux) qui checke si l'identificateur est dupliqué.
 
Exemple en shell  
 

Code :
  1. #!/bin/sh
  2. exec 3<fichier_chimique
  3. while read lig 0<&3
  4. do
  5.     clef=`echo $ligne |cut -f1 -d' '`
  6.     test "$clef" = "$mem" && continue
  7.      mem="$clef"
  8.      echo $ligne
  9. done


 
A chaque ligne, tu vérifies si l'espère est la même que celle de la ligne précédente. Si c'est le cas t'es sur une espèce dupliquée donc tu la sautes sinon tu mémorises l'espèce et t'affiches la ligne. Ca marchera à condition que le fichier soit trié sur l'espèce évidemment...
 
Tu peux écrire le même algo en awk ou en Python ce qui sera plus rapide.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed