4

Мой входной файл имеет три столбца, как показано ниже

Входной файл:

water   123   wa
water   123   at
water   123   te
water   123   er
rater   347   ra
rater   347   at
rater   347   te
rater   347   er

Теперь я хочу, чтобы мой выходной файл был похож на приведенный ниже, в котором частота биграмм указана после них в новом столбце.

Выходной файл:

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

Я попробовал приведенную ниже команду, но, к сожалению, я не получил желаемый результат:

$ 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

1 ответ1

1

Один из способов - обработать файл дважды: первый раз, второй раз:

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

Поочередно сохраняйте каждую строку, а затем выводите их все в конце:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .