escrevendo um comando AWK

4

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 semelhante ao abaixo, no qual a frequência de bigramas é listada depois deles 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

Eu 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
    
por Mani 06.09.2014 / 11:02

1 resposta

1

Uma maneira seria processar o arquivo duas vezes: primeira contagem de tempo, segunda impressão:

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

Como alternativa, armazene cada linha e, em seguida, exiba 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
    
por 09.09.2014 / 19:07

Tags