Dificultad para comprender la sintaxis AWK

Oct 20 2020

Así que admitiré que soy completamente nuevo en AWK y no tengo idea de cómo usarlo, sin embargo, estoy tratando de trabajar con una muestra de código de la guía del usuario de GNU awk.

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

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

Este fragmento de código simplemente imprime el recuento de cada palabra presente en la frecuencia

    {
    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 es uno que estoy tratando de usar. Estoy seguro de que tiene varios errores (obviamente porque cualquier salida que tengo es incorrecta o inexistente) pero no tengo la experiencia suficiente para conocer la sintaxis. Además, el archivo que estoy tratando de pasar es algo como esto

A
B
A
C
B
A
C
D

Respuestas

JamesBrown Oct 21 2020 at 03:57

Reorganicé y arreglé eso:

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
}

Salida:

A       3
B       2
C       2
D       1