Como você conta a primeira coluna gerada a partir do uniq -c

1

Eu tenho um arquivo que lista 5 linhas de palavras aleatórias "Ver ponto" "Ver pote de corrida", etc cada uma em uma nova linha. Consegui criar um código que contava o número de vezes que cada palavra aparece no arquivo e classificada corretamente.

4 Spot  
3 run  
2 see  
1 sees  
1 Run  
1 Jane  

Código usado:

cat "FILENAME" | tr ' ' '\n' | sort -n | uniq -c | sort -r  

Eu coloquei cada palavra em uma nova linha, classifiquei, contei valores exclusivos e classifiquei novamente. Agora preciso levar isso em conta, mas com essa saída:

3 1  
1 2  
1 3  
1 4  

Isto significa que existem 3 palavras com uma contagem de 1, 1 palavra 2, 1 palavra 3, 1 palavra 4.

Estou tendo 2 problemas. 1 é como posso obter uma contagem da primeira coluna que já é uma contagem do uniq -c. O segundo problema é excluir as palavras na segunda coluna e substituí-las pela contagem original de 1, 2, 3, 4.

    
por Mack 27.04.2018 / 20:15

1 resposta

2

Você poderia fazer algo como:

tr ' ' '\n' <infile \
 | sort -n \
 | uniq -c \
 | awk '{ seen[$1]++ } END{for (x in seen) print seen[x], x }'

Ou até mesmo:

tr ' ' '\n' <infile | sort -n | uniq -c|cut -d' ' -f7 |sort |uniq -c

Ou melhor possível fazer com awk sozinho:

awk '{ seen[$0]++ } 
    END{ for (x in seen) count[seen[x]]++; for (y in count) print count[y],y }
' RS='( |\n)+' infile
3 1
1 2
1 3
1 4

Acima em awk , em seen[$0]++ para cada ecr R , S eparated com espaço ou com% e_line% ewline armazena todo o registro no arquivo associado matriz chamada \n como chave e seu valor incrementa quando a mesma chave é vista novamente.

No seen quando todos os registros forem lidos, este bloco será executado e para cada chave (definimos END{ ... } como índice variável para percorrer todos os elementos nesse array usando para loop) salvo no array visto usamos o valor de visto x como a chave do novo array chamado seen[x] e novamente seu incremento de valor para a mesma chave.

Posteriormente, usamos outro loop e count como índice de variável para imprimir primeiro os valores y (que são contagens) e count[y] keys.

    
por 27.04.2018 / 20:53