
Meine Eingabedatei hat drei Spalten wie die folgende
Eingabedatei:
water 123 wa
water 123 at
water 123 te
water 123 er
rater 347 ra
rater 347 at
rater 347 te
rater 347 er
Jetzt möchte ich, dass meine Ausgabedatei wie die folgende aussieht, wobei die Häufigkeit der Bigramme in einer neuen Spalte dahinter aufgeführt wird.
Ausgabedatei:
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
Ich habe den folgenden Befehl ausprobiert, aber leider nicht das gewünschte Ergebnis erzielt:
$ 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
Antwort1
Eine Möglichkeit wäre, die Datei zweimal zu verarbeiten: beim ersten Mal zählen, beim zweiten Mal drucken:
awk 'NR==FNR {count[$3]++; next} {print $0, count[$3]}' input.file input.file
Alternativ können Sie jede Zeile speichern und sie dann alle am Ende ausgeben:
awk '
{count[$3]++; line[NR]=$0}
END {
for (nr=1; nr<=NR; nr++) {
$0 = line[nr]
print $0, count[$3]
}
}
' input.file