
Meu arquivo de entrada tem três colunas como a abaixo
Arquivo de entrada:
water 123 wa
water 123 at
water 123 te
water 123 er
rater 347 ra
rater 347 at
rater 347 te
rater 347 er
Agora quero que meu arquivo de saída seja como o mostrado abaixo, no qual a frequência dos bigramas é listada após eles em uma nova coluna.
Arquivo de saída:
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
Tentei o comando abaixo, mas infelizmente não obtive o resultado desejado:
$ 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
Responder1
Uma maneira seria processar o arquivo duas vezes: contagem na primeira e impressão na segunda:
awk 'NR==FNR {count[$3]++; next} {print $0, count[$3]}' input.file input.file
Como alternativa, armazene cada linha e produza todas elas no final:
awk '
{count[$3]++; line[NR]=$0}
END {
for (nr=1; nr<=NR; nr++) {
$0 = line[nr]
print $0, count[$3]
}
}
' input.file