[AWK/SED] Supprimer lignes en double
Résolu/Fermé
A voir également:
- [AWK/SED] Supprimer lignes en double
- Double ecran - Guide
- Whatsapp double sim - Guide
- Supprimer une page word - Guide
- Supprimer compte instagram - Guide
- Supprimer les photos en double sur pc - Guide
5 réponses
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
23 mai 2008 à 11:54
23 mai 2008 à 11:54
hello avec awk:
awk '{if (x[$0] != "") next ; print $0 ; x[$0]=$0}' < fichier.txt
asevere
Messages postés
13084
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
3 février 2022
426
23 mars 2009 à 09:54
23 mars 2009 à 09:54
Une autre solution peut-être:
Ca trie le fichier en ne conservant qu'une occurence de chaque chaine, puis ça cherche la première chaine complête identique dans le fichier...
A plus
sort -u test|xargs -I line -L1 grep -m1 "^line$" testAttention, les commutateur pour xargs sont ceux d'OS X, a adapter pour linux (a priori, -i line ou -i tout seul et une paire d'accollade {})
Ca trie le fichier en ne conservant qu'une occurence de chaque chaine, puis ça cherche la première chaine complête identique dans le fichier...
A plus
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
23 mai 2008 à 10:13
23 mai 2008 à 10:13
Salut,
Et pourquoi pas avec "sort -u" tout simplement ? A moins qu'il ne faille pas trier le fichier avant ?
Et pourquoi pas avec "sort -u" tout simplement ? A moins qu'il ne faille pas trier le fichier avant ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pourquoi ne pas essayer avec tr -d ?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
23 mai 2008 à 11:02
23 mai 2008 à 11:02
Parce que "tr" n'est pas fait pour ça...
tr copie son entrée standard sur sa sortie standard en effectuant l'une des manipulations suivantes : · transposer, et éventuellement réunir les caractères dupliqués de la chaîne résultante · réunir les caractères dupliqués · supprimer des caractères · supprimer des caractères, et éventuellement réunir les car- actères dupliqués de la chaîne résultantepas des lignes en double.
20 déc. 2008 à 09:19
19 mars 2009 à 19:38
- numéroter les lignes (cat -n)
- trier les lignes sans prendre en compte le premier champ -le numéro de ligne- (sort -k2)
- ne garder qu'un seul exemplaire des lignes triées, toujours sans prendre en compte le premier champ (uniq -f 1)
- réarranger les lignes dans l'ordre initial en triant par numéro de ligne (sort -n -k1,1)
- et enfin, supprimer les numéros de lignes (cut -d' ' -f2-) (ou avec sed si jamais des tas d'espaces ont été ajoutés avant le numéro de ligne)
Sauf erreur de ma part, en pipant tout ça, ça devrait aller, si ce n'est que ce ne sera pas forcément la première occurence des doublons qui sera conservée (et maintenant que j'en suis là, je me rends compte que ça casse tout ^^ )
23 mars 2009 à 08:27
21 mai 2010 à 02:33
FICHIER=adressedufichier
DOUBLONS="$(cat $FICHIER | sort | uniq -d)"
if [ "$DOUBLONS" != "" ]; then
for line in $(seq 1 $(echo "$DOUBLONS" | wc -l)); do
TXTASUPPRIMER=$(echo "$DOUBLONS" | sed $line!d)
LIGNESASUPPRIMER=$(grep -n "$TXTASUPPRIMER" $FICHIER | sed -e 1d -e 's/\([0-9]*\):.*/-e \1d/')
sed $LIGNESASUPPRIMER -i $FICHIER
done
fi