AWK 명령 작성

AWK 명령 작성

내 입력 파일에는 아래와 같은 세 개의 열이 있습니다.

입력 파일:

water   123   wa
water   123   at
water   123   te
water   123   er
rater   347   ra
rater   347   at
rater   347   te
rater   347   er

이제 내 출력 파일이 아래 파일과 같기를 원합니다. 여기서 바이그램의 빈도는 새 열에 그 뒤에 나열됩니다.

결과물 파일:

water   123   wa   1
water   123   at   2
water   123   te   2
water   123   er   2
rater   347   ra   1
rater   347   at   2
rater   347   te   2
rater   347   er   2

아래 명령을 시도했지만 안타깝게도 원하는 결과를 얻지 못했습니다.

$ awk 'BEGIN {FS="\t"} {for (i=1; i<=NF; i++) count[$3]++}
       END {for (word in count) printf "%s\t%s\t%s\t%d\n", $1, $2, word, count[word]}' \
            INPUT_FILE

답변1

한 가지 방법은 파일을 두 번 처리하는 것입니다. 첫 번째 계산, 두 번째 인쇄:

awk 'NR==FNR {count[$3]++; next} {print $0, count[$3]}' input.file input.file

또는 각 줄을 저장한 다음 끝에 모두 출력합니다.

awk '
    {count[$3]++; line[NR]=$0} 
    END {
        for (nr=1; nr<=NR; nr++) {
            $0 = line[nr]
            print $0, count[$3]
        }
    }
' input.file

관련 정보