Si j'ai un fichier texte avec le contenu suivant
red Apple
green Apple
green Apple
orange
orange
orange
Existe-t-il une commande ou un script que je peux utiliser pour obtenir le résultat suivant?
1 red Apple
2 green Apple
3 orange
Envoyez-le par sort
(pour assembler les éléments adjacents) puis par uniq -c
pour donner des comptes, à savoir:
sort filename | uniq -c
et pour obtenir cette liste dans l'ordre de tri (par fréquence), vous pouvez
sort filename | uniq -c | sort -nr
Presque identique à celui de borribles, mais si vous ajoutez le paramètre d
à uniq
, il affiche uniquement les doublons.
sort filename | uniq -cd | sort -nr
uniq -c file
et si le fichier n'est pas déjà trié:
sort file | uniq -c
Essaye ça
cat myfile.txt| sort| uniq
Pouvez-vous vivre avec une liste alphabétique, ordonnée:
echo "red Apple
> green Apple
> green Apple
> orange
> orange
> orange
> " | sort -u
?
green Apple
orange
red Apple
ou
sort -u FILE
-u signifie unique, et l'unicité n'est atteinte que par le tri.
Une solution qui préserve la commande:
echo "red Apple
green Apple
green Apple
orange
orange
orange
" | { old=""; while read line ; do if [[ $line != $old ]]; then echo $line; old=$line; fi ; done }
red Apple
green Apple
orange
et avec un fichier
cat file | {
old=""
while read line
do
if [[ $line != $old ]]
then
echo $line
old=$line
fi
done }
Les deux derniers ne suppriment que les doublons, qui suivent immédiatement - ce qui correspond à votre exemple.
echo "red Apple
green Apple
lila banana
green Apple
" ...
Imprimera deux pommes, séparées par une banane.
cat <filename> | sort | uniq -c
Pour obtenir un compte:
$> egrep -o '\w+' fruits.txt | sort | uniq -c
3 Apple
2 green
1 oragen
2 orange
1 red
Pour obtenir un compte trié:
$> egrep -o '\w+' fruits.txt | sort | uniq -c | sort -nk1
1 oragen
1 red
2 green
2 orange
3 Apple
EDIT
Aha, ce n'était pas le long des frontières de Word, mon mauvais. Voici la commande à utiliser pour les lignes complètes:
$> cat fruits.txt | sort | uniq -c | sort -nk1
1 oragen
1 red Apple
2 green Apple
2 orange