Проблема с вашим кодом двоякая:
awk
так, как обычно. Он явно перебирает строки файла в блоке BEGIN
. Это не идиоматический способ, которым обычно пишут awk
программы, заключающиеся в предоставлении (необязательных )шаблонов или условий для выполнения блоков для каждой входной записи (строки ). 20 3
к sum
, но сначала вам придется разделить это на 20
и 3
. В GNU awk
или mawk
мы можем установить в качестве разделителя записей RS
регулярное выражение, которое соответствует любой последовательности пробельных символов вместо новой строки по умолчанию. Это заставляет awk
читать файл как набор записей отдельных полей, разделенных пробелами -. Суммирование их и вывод суммы в конце тривиально :
.
$ awk -v RS='[[:space:]]+' '{ sum += $1 } END { print sum }' FileInput.txt
168
Как вариант,
$ awk 'BEGIN { RS = "[[:space:]]+" } { sum += $1 } END { print sum }' FileInput.txt
168
Или вы можете сделать некоторый вариант того, что показывает Ромео Нинов , а именно перебрать поля каждой строки,
$ awk '{ for (i = 1; i <= NF; ++i) sum += $i } END { print sum }' file
168