Usando wget e awk para contar expressões semelhantes

1

Estou tentando criar um script que use wget para fazer o download de um conjunto de dados e, em seguida, awk para classificar o arquivo e informar o filtro mais comum usado, que é $14 column. Até agora eu tenho a função wget funcionando como visto abaixo,

wget -O- http://energy.gov/sites/prod/files/FieldSampleAirResults_0.csv 

Mas então eu enviaria isso para um script awk ou tentaria fazer tudo em um script? Além disso, eu sei como você verificaria palavras comuns, seria algo como

$14=="charcoal" {++charcoal} 

mas não sei como implementar isso em um script awk . Qualquer conselho ou ajuda seria muito apreciado.

Obrigado, Kevin

    
por kevin jack 25.04.2012 / 18:33

2 respostas

3

Imprime o tipo de filtro que mais ocorre.

wget -O- http://energy.gov/sites/prod/files/FieldSampleAirResults_0.csv | awk -F, '
    {
        filters[$14]++
    }
    END {
        for (filter in filters) {
            if (filters[filter] > max) {
                max = filters[filter]
                type = filter
            }
        }
        print type
    }'

Você pode imprimir facilmente cada um dos tipos e suas contagens, se preferir. O AWK pode fazer a classificação, se necessário, ou você pode usar o utilitário sort externo.

    
por 26.04.2012 / 04:50
2

Eu usaria uniq para lidar com a contagem:

wget -O- http://energy.gov/sites/prod/files/FieldSampleAirResults_0.csv | cut -d, -f14 | sort | uniq -c

Observe que isso não tratará campos citados contendo vírgulas corretamente. Se você precisar lidar com isso, precisará de algo que realmente entenda o formato CSV, como o módulo csv do Python:

python -c 'import csv; import sys; [sys.stdout.write(row[14]+"\n") for row in csv.reader(sys.stdin)]'
    
por 25.04.2012 / 18:59

Tags