Schreiben eines AWK-Befehls

Schreiben eines AWK-Befehls

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

verwandte Informationen