awk 스크립트에서 명령 출력을 저장하고 정렬하는 방법은 무엇입니까?

awk 스크립트에서 명령 출력을 저장하고 정렬하는 방법은 무엇입니까?

그래서 첫 번째 필드를 뺀 문자의 발생 횟수를 계산하는 awk 스크립트가 있고 모든 순열에 대한 변수에 명령의 출력을 저장하려고 합니다. 그러나 아래 방법은 효과가 없는 것 같습니다.

#!/bin/awk -f
{
var=$($1="";print gsub("o",""))
echo $var
}

입력하다:

Hello how are you?
Orange obliviate

산출:

3
2

원하는 출력:

3 2

감사합니다!

답변1

블록에서 출력하는 배열에 숫자를 저장하여 END이를 수행 할 수 있습니다.

{
    $1 = ""
    count[++n] = gsub("o", "")
}

END {
    $0 = ""                   # empty the current record
    for (i = 1; i <= n; ++i)
        $i = count[i]         # create new fields for output

    # output the current record (created above)
    print
}

또는 계산된 숫자를 출력하고 필요한 경우 필드 구분 기호로 구분한 다음 END블록의 행을 완성할 수 있습니다.

{
    $1 = ""

    # Print the number, preceded by OFS if this is not the first line.
    # Does not output a newline (ORS).
    printf "%s%s", (NR > 1 ? OFS : ""), gsub("o", "")
}

END {
    # Finish the output (ORS is a newline by default).
    printf "%s", ORS
}

두 변형 모두 사용자가 명령줄에서 자신에게 적합한 값을 설정할 수 있습니다 OFS.ORS

$ awk -v OFS=',' -f script.awk file
2,1
$ awk -v OFS='\t' -f script.awk file
2       1
$ awk -v OFS='-->' -v ORS='.\n' -f script.awk file
2-->1.

참고: 이것이 당신이 하고 있는 일이기 때문에 질문에 표시된 출력이 잘못되었다고 가정합니다.아니요첫 번째 필드를 무시하고o 편지).

관련 정보