AWK деление на ноль ошибок - PullRequest
1 голос
/ 03 февраля 2012

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

В этом случае это должна быть печать 1.11557887 от 1.7229 / 1.5444.

Может ли быть проблема с тем, как я назначил переменные?

Это мой сценарий:

#!/usr/bin/awk -f

FNR == 22 { measC = $2 }
FNR == 23 { refC = $2 }
factorC = refC / measC
{ print factorC }

Возвращает:

/usr/bin/awk: division by zero
 input record number 1, file 1.txt
 source line number 5

Вот так выглядят мои входные данные:

#!xxx x
# x x x x x x
# x: x x
# x: x x
# x: x x x x x
# (x) x x, x x x, x.
x: x x x x
x: 3.0.0
x: x
x: 0
x: x x
x: 0
x: x x
x: x
x: 0
x: 0
x: 2
x: x x x
x: x
x: 1
x: 4
origmax: 1.5444 1.5188 1.0221 1.4932
currentmax: 1.7229 1.6888 1.1069 1.6238

Ответы [ 2 ]

5 голосов
/ 03 февраля 2012

Поскольку вы помещаете factorC = refC / measC вне блока, awk считает, что вы хотите использовать это выражение в качестве шаблона.Таким образом, он оценивает это выражение для каждой строки ввода.В первой строке ввода measC еще не определено, поэтому по умолчанию оно равно нулю.

Я думаю, вы хотите это:

#!/usr/bin/awk -f

FNR == 22 { measC = $2 }
FNR == 23 { refC = $2 }
END {
    factorC = refC / measC
    print factorC
}

или это:

#!/usr/bin/awk -f

FNR == 22 { measC = $2 }
FNR == 23 {
    refC = $2
    factorC = refC / measC
    print factorC
}
2 голосов
/ 03 февраля 2012

Ваш сценарий говорит:

FNR == 22 { measC = $2 }

Итак ... когда только этот, скажем, пять строк вашего входного файла был прочитан этим сценарием awk, каково значение measureC?

Я открою тебе секрет. Это будет ноль. Потому что ничто еще не назначило что-либо еще для измерения.

Также ваша линия:

factorC = refC / measC

находится за пределами блока, поэтому он используется для оценки необходимости запуска { print factorC }. И поскольку это условие , оно запускается для каждой строки. И разве вы не знаете, что перед строкой 22, measureC равно 0.

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

Чего вы пытаетесь достичь с этим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...