Como obter o número total de linhas e contagens exclusivas na mesma linha

2

Eu tenho um arquivo (test.csv) contendo as seguintes linhas:

2016-08-23 00:00:00,270113184103681474

2016-08-23 00:00:00,270113184101689340

2016-08-23 00:00:00,270113184103681474

2016-08-23 00:00:00,270113184101689340

2016-08-23 01:00:00,270113184103681474

2016-08-23 01:00:00,270113184101689340

Eu gostaria de obter o número total de linhas e as ocorrências exclusivas da segunda coluna para cada uma das primeiras colunas. A saída desejada para as linhas acima seria:

2016-08-23 00:00:00, 4, 2

2016-08-23 01:00:00, 2, 2

Existe uma solução grep / awk simples para isso?

    
por vbjox 24.08.2016 / 23:38

2 respostas

4

A solução ingênua é apenas contar cada ocorrência e acompanhar para ver se a vimos antes.

Então:

awk -F, '{ t[$1]++; seen[$0]++; if (seen[$0] == 1) { u[$1]++ } }
         END { for (a in t) { print a "," t[a] "," u[a] } }'

A primeira linha irá acompanhar o número total de vezes que a data ocorreu em t . Ele rastreará o número de vezes que vimos cada linha em seen e, se essa for a primeira vez que a vemos, sabemos que é única e contabilizamos em u .

A segunda linha irá iterar os resultados e imprimi-los.

    
por 24.08.2016 / 23:54
1

Se você tiver acesso ao GNU awk

awk -F, '{a[$1]++; b[$1][$2]}; 
    END{for (k in a) printf "%s,%d,%d\n", k, a[k], length(b[k])}' test.csv
    
por 25.08.2016 / 02:42

Tags