[AWK/SED] Supprimer lignes en double
Résolu
JC
-
yomanyo -
yomanyo -
Bonjour,
je souhaite n'afficher qu'une seule fois les lignes d'un fichier qui apparaissent une ou plusieurs fois.
Je pense que c'est faisable avec AWK ou SED mais je ne vois pas comment...
merci à tous!
je souhaite n'afficher qu'une seule fois les lignes d'un fichier qui apparaissent une ou plusieurs fois.
Je pense que c'est faisable avec AWK ou SED mais je ne vois pas comment...
merci à tous!
A voir également:
- [AWK/SED] Supprimer lignes en double
- Double ecran - Guide
- Supprimer rond bleu whatsapp - Guide
- Whatsapp double sim - Guide
- Supprimer page word - Guide
- Partager photos en ligne - Guide
5 réponses
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
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
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.
- 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 ^^ )
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