[Ubuntu 14,04, GNU Awk 4.0.1]AWK числовая переменная рассматривается как строка
У меня есть странная проблема ... Я задаю числовое значение, которое извлекается из входного файла, к пользовательской переменной , Когда я печатаю его, он отображается правильно, а при печати его длины отображается правильное количество цифр.
Однако, когда я использую переменную в цикле, мой цикл останавливается, когда индекс становится больше, чем самая значительная цифра моей переменной.
Я пробовал цикл For Loop, и теперь Loop Loop, обе страдают той же проблемой.
С файлом, который я обрабатываю, samples
содержит значение 8092, а цикл останавливается на девятой итерации.
#!/usr/bin/awk -f
BEGIN {
samples = 0;
}
{
...
samples = $24;
}
END {
i = 1;
while (i <= samples) {
if (i>samples) { print "This is the end.\n " i " is bigger than " samples;}
i++;
}
}
Я очень новичок в AWK и не понимаю, почему это происходит. Прочитав несколько руководств, у меня сложилось впечатление, что AWK может конвертировать между строками & числовые представления чисел по мере необходимости.
Может кто-нибудь помочь мне увидеть, что я сделал неправильно?
Решение Ответ был, как JNevill & Ghoti предложил, чтобы добавить 0 к переменной. В моем случае лучшее место было перед циклом, так как образцы были переписаны во время действия AWK-скрипта. Благодарю.
Возможно ли, что переменная 'sample' содержит возврат каретки? Это может произойти, если входной файл был создан в Windows, а $ 24 - последнее поле в строке. Конечно, в этом случае длина (образец) будет равна 5 вместо 4, поэтому вы должны были заметить, что именно так вы показываете длину. – rici
или отредактируйте свой вопрос, чтобы включить самый маленький набор данных, который воспроизводит проблему (не 8092 строки!) И ваш ожидаемый результат с этого ввода. Удачи. – shellter