
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