Dificuldade em entender a sintaxe AWK

Oct 20 2020

Portanto, devo admitir que sou completamente novo no AWK e não tenho ideia de como usá-lo, no entanto, estou tentando trabalhar a partir de um exemplo de código do guia do usuário do GNU awk.

{
    for (i = 1; i <= NF; i++)
        freq[$i]++
}

END {
    for (word in freq)
        printf "%s\t%d\n", word, freq[word]
}

Este trecho de código simplesmente imprime a contagem de cada palavra presente no in freq

    {
    data[++data_index] = $0
    }

END {
    produce_numbers(data)
    for(i in freq)
        printf("%s\t%d", i, freq[i])
}

function produce_numbers(sortedarray)
{
    n = asort(sortedarray)
    sum = 0

    for(i = 1; i <= n; i++)
    {
        freq[$i]++
    }

    return
}

Este é um que estou tentando usar. Tenho certeza de que há vários erros (obviamente porque qualquer saída que tenho é errada ou inexistente), mas não tenho experiência o suficiente para saber a sintaxe. Além disso, o arquivo que estou tentando passar é algo assim

A
B
A
C
B
A
C
D

Respostas

JamesBrown Oct 21 2020 at 03:57

Eu reorganizei e consertei isso:

function produce_numbers(sortedarray)
{
    n = asort(sortedarray)
    # sum = 0                          # not used

    for(i = 1; i <= n; i++)
    {
        freq[sortedarray[i]]++         # $i is unusable at this point } return } { data[++data_index] = $0
}
END {
    produce_numbers(data)
    for(i in freq)
        printf("%s\t%d\n", i, freq[i])  # added newline to output
}

Resultado:

A       3
B       2
C       2
D       1