Приложение вызывается каждый раз, когда я вхожу в систему

Проблема с вашим кодом двоякая:

  1. На самом деле он не использует awkтак, как обычно. Он явно перебирает строки файла в блоке BEGIN. Это не идиоматический способ, которым обычно пишут awkпрограммы, заключающиеся в предоставлении (необязательных )шаблонов или условий для выполнения блоков для каждой входной записи (строки ).
  2. Так как ввод состоит из записей (по умолчанию отдельных строк )с более чем одним числом, вам придется обрабатывать эти записи таким образом, чтобы отдельные числа суммировались. Другими словами, вы не можете добавить 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

0
17.02.2021, 19:20
0 ответов

Теги

Похожие вопросы