escrevendo um comando AWK

escrevendo um comando AWK

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

informação relacionada