AWK 구문을 이해하기 어려움

Oct 20 2020

그래서 나는 AWK를 완전히 처음 접했고 어떻게 사용하는지 모르겠지만 GNU awk 사용자 가이드의 코드 샘플을 작업하려고합니다.

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

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

이 코드 조각은 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
}

이것은 내가 사용하려는 것입니다. 나는 그것이 몇 가지 실수를 가지고 있다고 확신하지만 (분명히 내가 가진 출력이 잘못되었거나 존재하지 않기 때문에) 구문을 알만큼 경험이 부족합니다. 또한 전달하려는 파일은 다음과 같습니다.

A
B
A
C
B
A
C
D

답변

JamesBrown Oct 21 2020 at 03:57

나는 다음을 재구성하고 수정했습니다.

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
}

산출:

A       3
B       2
C       2
D       1