Khó hiểu cú pháp AWK

Oct 20 2020

Vì vậy, tôi sẽ thừa nhận rằng tôi hoàn toàn mới với AWK và không biết cách sử dụng nó, tuy nhiên tôi đang cố gắng làm việc với một mẫu mã từ hướng dẫn sử dụng GNU awk.

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

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

Đoạn mã này chỉ đơn giản là in số lượng của mỗi từ có trong tần số

    {
    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
}

Đây là một trong những tôi đang cố gắng sử dụng. Tôi chắc chắn rằng nó có một số sai lầm (Rõ ràng là vì bất kỳ đầu ra nào của tôi đều sai hoặc không có) nhưng tôi không đủ kinh nghiệm để biết cú pháp. Ngoài ra tệp tôi đang cố gắng vượt qua là một cái gì đó như thế này

A
B
A
C
B
A
C
D

Trả lời

JamesBrown Oct 21 2020 at 03:57

Tôi đã tổ chức lại và khắc phục điều đó:

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
}

Đầu ra:

A       3
B       2
C       2
D       1