Vous voudrez peut-être regarder les applications uniq
et sort
.
./yourscript.ksh | trier | uniq
(Pour info, oui, le tri est nécessaire dans cette ligne de commande, uniq
ne supprime que les lignes en double qui se suivent immédiatement)
ÉDITER:
Contrairement à ce qui a été publié par Aaron Digulla en ce qui concerne uniq
les options de ligne de commande de:
Étant donné l'entrée suivante:
classe
pot
pot
pot
poubelle
poubelle
Java
uniq
affichera toutes les lignes exactement une fois:
classe
pot
poubelle
Java
uniq -d
affichera toutes les lignes qui apparaissent plusieurs fois et les imprimera une fois:
pot
poubelle
uniq -u
affichera toutes les lignes qui apparaissent exactement une fois et les imprimera une fois:
classe
Java
Matthew Scharley
la source
sort
propose également une-u
version pour donner les valeurs uniques.uniq
coutures ne traitent que les lignes adjacentes (au moins par défaut), ce qui signifie que l'on peutsort
entrer avant l'alimentationuniq
.C'est la même chose que la réponse du monoxyde , mais un peu plus concise.
la source
... | sort | uniq
parce qu'il est exécuté en une seule foisPour les ensembles de données plus volumineux où le tri peut ne pas être souhaitable, vous pouvez également utiliser le script perl suivant:
Cela se souvient simplement de chaque sortie de ligne afin de ne pas la restituer.
Il présente l'avantage sur la "
sort | uniq
" solution dans la mesure où aucun tri n'est requis à l'avance.la source
Avec zsh, vous pouvez le faire:
Ou vous pouvez utiliser AWK:
la source
awk
(voir stackoverflow.com/a/21200722/45375 pour une explication) fonctionnera avec des fichiers volumineux tant que le nombre de lignes uniques est suffisamment petit (car les lignes uniques sont conservées en mémoire ). Lazsh
solution lit d'abord l'intégralité du fichier en mémoire, ce qui n'est peut-être pas une option avec des fichiers volumineux. De plus, comme écrit, seules les lignes sans espaces incorporés sont gérées correctement; pour résoudre ce problème, utilisezIFS=$'\n' read -d '' -r -A u <file; print -l ${(u)u}
plutôt.(IFS=$'\n' u=($(<infile)); print -l "${(u)u[@]}")
[@]
suffixe pour référencer tous les éléments d'un tableau - il semble que - au moins à partir de la version 5 - cela fonctionne sans; ou venez-vous de l'ajouter pour plus de clarté?print -l "${(fu)$(<infile)}"
awk
sortie de l' échantillon.Les canaliser à travers
sort
etuniq
. Cela supprime tous les doublons.uniq -d
ne donne que les doublons,uniq -u
ne donne que les uniques (supprime les doublons).la source
uniq -u
n'est PAS le comportement par défaut (voir la modification dans ma réponse pour plus de détails)Avec AWK vous pouvez le faire, je le trouve plus rapide que le tri
la source
Unique, comme demandé, (mais non trié);
utilise moins de ressources système pour moins de ~ 70 éléments (comme testé avec le temps);
écrit pour prendre l'entrée de stdin,
(ou modifier et inclure dans un autre script):
(Bash)
la source
Je reçois de meilleurs conseils pour obtenir des entrées non dupliquées dans un fichier
la source