web-dev-qa-db-fra.com

Commande ou script Linux comptant les lignes dupliquées dans un fichier texte?

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
107
timeon

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
203
borrible

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
46
Jaberino

uniq -c file

et si le fichier n'est pas déjà trié:

sort file | uniq -c

6
mhyfritz

Essaye ça

cat myfile.txt| sort| uniq
3
Rahul

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.

2
user unknown
cat <filename> | sort | uniq -c
2
pajton

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
0
Chris Eberle