Difficulté à comprendre la syntaxe AWK

Oct 20 2020

J'admets donc que je suis complètement nouveau dans AWK et que je n'ai aucune idée de comment l'utiliser, mais j'essaie de travailler sur un exemple de code du guide de l'utilisateur GNU awk.

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

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

Cet extrait de code affiche simplement le décompte de chaque mot présent dans le 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
}

C'est celui que j'essaye d'utiliser. Je suis sûr qu'il a plusieurs erreurs (évidemment parce que toute sortie que j'ai est fausse ou inexistante) mais je n'ai pas assez d'expérience pour connaître la syntaxe. De plus, le fichier que j'essaie de transmettre est quelque chose comme ça

A
B
A
C
B
A
C
D

Réponses

JamesBrown Oct 21 2020 at 03:57

J'ai réorganisé et corrigé cela:

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
}

Production:

A       3
B       2
C       2
D       1