escribiendo un comando AWK

escribiendo un comando AWK

Mi archivo de entrada tiene tres columnas como la siguiente

Fichero 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

Ahora quiero que mi archivo de salida sea como el siguiente, en el que la frecuencia de los bigramas aparece después de ellos en una nueva columna.

Archivo de salida:

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

Probé el siguiente comando, pero desafortunadamente no obtuve el resultado deseado:

$ 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

Respuesta1

Una forma sería procesar el archivo dos veces: la primera vez contando, la segunda impresión:

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

Alternativamente, almacene cada línea y luego envíelas todas al final:

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

información relacionada