Supprimer leslignes en double d'un fichier [Résolu/Fermé]

Signaler
Messages postés
2883
Date d'inscription
dimanche 30 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
-
 samsoul92 -
Bonjour.

COmme l'indique le titre, j'ai un fichier texte très gros (presque 20000 Lignes), avec plusieurs lignes en double, en triple, en quadruple, voire des centaines de fois.
J'aurais besoin de supprimer les lignes en double du fichier.
Pour précision, toutes les lignes se terminent par un point-virgule ";" et ce caractère est présent une fois et une seule par ligne.
(en fait chaque ligne est une commande)

Donc je cherche comment faire un script en bash qui parcoure les lignes de mon fichier une à une, et pour chaque ligne vérifie s'il en existe une autre pareille, et si c'est le cas l'efface.

Quelqu'un a-t-il une solution ?
Merci.
--
Sylvain

12 réponses

Messages postés
9
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
1 mars 2010
26
sorry
j'avais pas fait attention car g suis débutant
donc avec : cat fichier | sort | uniq
cela fonctionne!
31
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 774
Teste et tu verras, c'est le meilleur moyen et le meilleur apprentissage ;-))
cat fichier | sort -u
Messages postés
35681
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
12 octobre 2020
5 532
Messages postés
267
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
29 septembre 2016
75
petit complément pour une suppression des doublons en une seule ligne, voici ce que j'ai fait (je passe par un fichier temporaire pour éviter d'effacer le fichier que je suis en train de lire) :
(cat monfichier|uniq>monfichier.tmp) &&  mv -f monfichier.tmp monfichier
je vous donne vite fait un algo pour supprimer les lignes mutiples sans modifier leur ordre initial (scripté en bash mais performant)

il faut copier coller les lignes ci dessous dans un fichier (Je l'ai appelé "vir_ligne_doublon")
un chmod +x dessus.
EN GROS:
je repère les doublons avec les binaire sort et uniq ( super rapidement) et ensuite je filtre chaque ligne une par une avec un filtre qui ne se met a jour qu'avec les lignes en doublon. (Les autres n'ayant pas besoin d'être filtrées)

Utilisation : ./vir_ligne_doublon Fichier_a_épurer
Cela génère un nouveau fichier nommé Fichier_a_épurer.nodoublon

#!/bin/bash
FILE=$1
echo Analyse :
sort $FILE|uniq -c|tee report|awk '$1 > 1'|sed "s/^[^0-9]*\([0-9][0-9]*\) \(.*\)$/Il y a \1 fois: \2/"
echo "Continuer ? (Ou CTRL/C)" ; read A
awk '$1 > 1' report|sed "s/^[^0-9]*[0-9][0-9]* //" > en_doublon
>filtre ; >$FILE.nodoublon
while read LIGNE
do
echo "$LIGNE"|grep -vxf filtre |tee -a $FILE.nodoublon|grep -xf en_doublon >> filtre
done < $FILE
rm en_doublon filtre
echo Nombre de lignes avant et apres
wc -l $FILE*
echo Resultat:
sed "s/^/ /" $FILE.nodoublon
Messages postés
1288
Date d'inscription
dimanche 21 septembre 2008
Statut
Contributeur
Dernière intervention
17 mars 2017
783
plus simple j'ai trouvé ça Delete duplicate lines : http://textop.us/Lines-tools/Delete-Duplicate-Lines
Messages postés
267
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
29 septembre 2016
75
impossible d'y accéder : "This Account Has Been Suspended" :(
Messages postés
1288
Date d'inscription
dimanche 21 septembre 2008
Statut
Contributeur
Dernière intervention
17 mars 2017
783
Messages postés
141
Date d'inscription
vendredi 1 juin 2007
Statut
Membre
Dernière intervention
30 août 2016
29
si l'ordre des lignes n'est pas important:

cat fichier | sort | uniq

sinon, perl est mieux pour ça à mon avis
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 774
Salut,

Y-a-t'il la possibilité de trier ton fichier avant ? Si oui :
sort -u fichier
;-))
Messages postés
3
Date d'inscription
mercredi 25 novembre 2009
Statut
Membre
Dernière intervention
11 décembre 2010
1
bonjour,
ya pas la même commande (sort -u) sous windows ... j'arrive pas à effacer les doublons .. quand j'essaye avec cette commande il me sort cet erreur (fichier d'entré spécifié deux fois)
Messages postés
2883
Date d'inscription
dimanche 30 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
797
Trier mon fichier, c'est à dire mettre les lignes identiques les unes après les autres ?
C'est déjà fait ;-)
--
Sylvain
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 774
Alors la solution t'est donnée au-dessus en double ;-))
Messages postés
2883
Date d'inscription
dimanche 30 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
797
Merci !
Waow, même avec ce tri, j'ai encore 1000 lignes... ça en fait du code :p
--
Sylvain
Messages postés
9
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
1 mars 2010
26
bonjour
Dans une liste, stockée dans un fichier texte avec un enregistrement par ligne,j'aimerais écrire un commande qui supprime les doublons
kelkun a t il une idée?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 774
Merci de relire le post et notamment la 1ère réponse !
Messages postés
9
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
1 mars 2010
26
Danke!
merci bien!
ça roule
Merci pour le script
tres bon travail.