
Мой входной файл содержит три столбца, как показано ниже.
Входной файл:
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
Одним из способов является двойная обработка файла: первый раз подсчет, второй раз печать:
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