Identifique o número de valores exclusivos e, em seguida, o número de ocorrências desses valores no arquivo

4

Eu tenho um arquivo de dados que contém 15.000 linhas, mas apenas 400 valores exclusivos. Eu estou procurando uma maneira de identificar o número de valores exclusivos e, em seguida, o número de ocorrências desses valores no arquivo. Eu vim com o seguinte, mas é muito muito lento. Alguma idéia?

for value in 'cat mylist.txt | uniq'
do
    counter='grep $value mylist.txt |wc -l'
    echo $value $counter
done
    
por Dana Max 09.10.2012 / 17:57

2 respostas

6

Use apenas sort e uniq:

sort mylist.txt | uniq | wc -l

Isso fornecerá o número de valores exclusivos. Para obter o número de ocorrências de cada valor único, use a opção uniq 's -c:

sort mylist.txt | uniq -c

Na página uniq man:

   -c, --count
               prefix lines by the number of occurrences

Além disso, para referência futura, a opção grep 's -c é útil:

 -c, --count
              Suppress  normal  output;  instead  print  a  count  of
              matching  lines  for  each  input  file.   With the -v,
              --invert-match option (see below),  count  non-matching
              lines.  (-c is specified by POSIX.)
    
por 09.10.2012 / 17:58
-1

Tente este aqui.

for w in 'cat $file'; 
do 
    echo $w; 
done|sort|uniq -c
    
por 01.09.2016 / 19:24