我有一个函数,它查看文件中的每个数字,检查它是否是一个理想平方,如果是,则将计数器加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
有没有避免这种情况的发生?我已经检查过类似的questions。
答案 0 :(得分:3)
问题是您使用{ 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
答案 1 :(得分:1)
请您也可以尝试以下方法。
awk 'function root(x)
{if (sqrt(x) == int(sqrt(x)))
{print x;count+=1
}
}
{root($1)}
END{print "count=",count}' Input_file
上面的代码应该在函数中找到TRUE条件时添加变量count
,并且您可以在函数本身内部增加其值,最后可以将其打印在END
的{{1}}块中代码。