Я вполне уверен, что эта строка
'gawk "BEGIN {minc =1000} {minlo=1000} {minla=1000}
не делает то, что вы думаете, что она делает.(Честно говоря, я изумлен, что он скомпилирован вообще, я не думаю, что это произойдет в Kernighan AWK.) И многое из того, что здесь происходит, на самом деле в каком-то файле Window BAT
?
Но вот некоторые предположения.
- Я думаю, что строка, которую я цитировал выше, устанавливает
minc
во время запуска, а затем устанавливает minlo
и minla
каждый раз это читает строку.Лучше было бы
.
'BEGIN { minc = 1000; minlo = 1000; minla = 1000; } ....
или даже
'BEGIN { minc = minlo = minla = 1000; } ....
- в AWK, вы должны немного остерегаться сравнений, потому что есливы не осторожны, он приводит ваши числа к строке и выполняет сравнение строк (т.е. лексикографическое упорядочение) вместо числового сравнения.
Ack, попытался сделать это как ответ на комментарий.Нет.
Причина, по которой первая строка не работает, состоит в том, что строки AWK имеют форму
PATTERN { code }
, где PATTERN - это некоторое выражение, которое идентифицирует набор входных записей (обычно строки)на котором действует часть кода.Существуют некоторые особые случаи, например BEGIN
, которые «совпадают» перед первым чтением.Другим частным случаем является пустой шаблон, который соответствует каждой строке.То, что вы имели, интерпретировалось как
BEGIN {minc =1000}
{minlo =1000}
{minla =1000}
Итак, перед обработкой первой строки ввода minc
устанавливается равным 1000. После , что на каждые строка ввода, minlo
и minla
установлены на 1000. Мои версии, поскольку все они выполняют инициализацию в строке BEGIN
, просто инициализируют значения один раз.