输出包括使用Awk检查的每个条件的空白行

时间:2018-10-16 07:32:28

标签: linux awk

我有一个函数,它查看文件中的每个数字,检查它是否是一个理想平方,如果是,则将计数器加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

2 个答案:

答案 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}}块中代码。