
내 입력 파일에는 아래와 같은 세 개의 열이 있습니다.
입력 파일:
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