Вывод включает пустую строку для каждого условия, которое было проверено с помощью Awk - PullRequest
0 голосов
/ 16 октября 2018

У меня есть функция, которая просматривает каждое число в файле, проверяет, является ли он идеальным квадратом, и, если это так, увеличивает счетчик на 1. Цель функции - подсчитать общее количество идеальных квадратов.

awk 'function root(x)  
{if (sqrt(x) == int(sqrt(x))) count+=1 } 
{print root($1)}
END{print count}' numbers_1k.list

Вывод этого кода дает пустую строку каждый раз, когда проверяется условие в строке файла.Таким образом, если файл имеет 1000 строк, его 1000 пустых строк в выходных данных сопровождаются переменной count

Есть ли способ избежать этого?Я проверил предыдущие подобные вопросы .

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Не могли бы вы попробовать тоже.

awk 'function root(x)  
{if (sqrt(x) == int(sqrt(x)))
 {print x;count+=1
 } 
}
{root($1)}
END{print "count=",count}'  Input_file

Выше кода следует добавлять переменную count всякий раз, когда в функции найдено условие ИСТИНА, и вы можете увеличивать ее значение внутри самой функции, наконец, вы можете напечататьэто в END блоке awk кода.

0 голосов
/ 16 октября 2018

Проблема в том, что вы используете { print root() }, где root() ничего не возвращает, должно быть:

awk 'function root() { return sqrt(x) == int(sqrt(x))}
     root($1) {count++}
     END {print count}' file

Кстати, вам не нужна функция для этого:

awk 'sqrt($1) == int(sqrt($1)) {count++} END {print count}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...