Supprimer leslignes en double d'un fichier

Résolu/Fermé
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 - 17 déc. 2007 à 17:59
 samsoul92 - 7 févr. 2015 à 10:06
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
A voir également:

12 réponses

Bourgeois74 Messages postés 9 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 1 mars 2010 28
13 nov. 2009 à 11:55
sorry
j'avais pas fait attention car g suis débutant
donc avec : cat fichier | sort | uniq
cela fonctionne!
33
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
13 nov. 2009 à 11:56
Teste et tu verras, c'est le meilleur moyen et le meilleur apprentissage ;-))
0
cat fichier | sort -u
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
3 juin 2011 à 21:52
0
boly38 Messages postés 267 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 29 septembre 2016 80
16 déc. 2013 à 14:38
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
0
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
5
smed_79 Messages postés 1288 Date d'inscription dimanche 21 septembre 2008 Statut Contributeur Dernière intervention 17 mars 2017 843
19 oct. 2011 à 04:08
plus simple j'ai trouvé ça Delete duplicate lines : http://textop.us/Lines-tools/Delete-Duplicate-Lines
3
boly38 Messages postés 267 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 29 septembre 2016 80
16 déc. 2013 à 14:30
impossible d'y accéder : "This Account Has Been Suspended" :(
0
smed_79 Messages postés 1288 Date d'inscription dimanche 21 septembre 2008 Statut Contributeur Dernière intervention 17 mars 2017 843
Modifié par smed_79 le 26/06/2014 à 07:54
0
spacm Messages postés 141 Date d'inscription vendredi 1 juin 2007 Statut Membre Dernière intervention 30 août 2016 30
17 déc. 2007 à 18:11
si l'ordre des lignes n'est pas important:

cat fichier | sort | uniq

sinon, perl est mieux pour ça à mon avis
2

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
17 déc. 2007 à 18:13
Salut,

Y-a-t'il la possibilité de trier ton fichier avant ? Si oui :
sort -u fichier
;-))
2
samsouma4t2 Messages postés 3 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 11 décembre 2010 1
11 déc. 2010 à 09:56
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)
1
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 825
17 déc. 2007 à 18:17
Trier mon fichier, c'est à dire mettre les lignes identiques les unes après les autres ?
C'est déjà fait ;-)
--
Sylvain
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
17 déc. 2007 à 18:20
Alors la solution t'est donnée au-dessus en double ;-))
0
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 825
17 déc. 2007 à 18:34
Merci !
Waow, même avec ce tri, j'ai encore 1000 lignes... ça en fait du code :p
--
Sylvain
0
Bourgeois74 Messages postés 9 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 1 mars 2010 28
13 nov. 2009 à 11:25
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?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
13 nov. 2009 à 11:44
Merci de relire le post et notamment la 1ère réponse !
0
Epic !
0
Bourgeois74 Messages postés 9 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 1 mars 2010 28
13 nov. 2009 à 12:00
Danke!
merci bien!
ça roule
0
Merci pour le script
tres bon travail.
0