Difficoltà a comprendere la sintassi di AWK

Oct 20 2020

Quindi ammetto che sono completamente nuovo in AWK e non ho idea di come usarlo, tuttavia sto cercando di elaborare un esempio di codice dalla guida utente GNU awk.

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

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

Questo frammento di codice stampa semplicemente il conteggio di ogni parola presente in 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
}

Questo è quello che sto cercando di usare. Sono sicuro che abbia diversi errori (ovviamente perché qualsiasi output che ho è sbagliato o inesistente) ma non ho abbastanza esperienza per conoscere la sintassi. Anche il file che sto cercando di passare è qualcosa del genere

A
B
A
C
B
A
C
D

Risposte

JamesBrown Oct 21 2020 at 03:57

Ho riorganizzato e corretto che:

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
}

Produzione:

A       3
B       2
C       2
D       1