Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 输出包括使用Awk检查的每个条件的空行_Linux_Awk - Fatal编程技术网

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

Linux 输出包括使用Awk检查的每个条件的空行,linux,awk,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个空行后跟变量计数 有没有

我有一个函数,它可以查看文件中的每个数字,检查它是否是一个完美的正方形,如果是,则将计数器递增1。该函数的目标是计算完美正方形的总数

awk 'function root(x)  
{if (sqrt(x) == int(sqrt(x))) count+=1 } 
{print root($1)}
END{print count}' numbers_1k.list
每次检查文件某行上的条件时,此代码的输出都会给出一个空行。因此,如果文件有1000行,则输出中的1000个空行后跟变量计数


有没有办法避免这种情况?我已经检查了前面的类似内容。

问题是,如果root不返回任何内容,则使用{print 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

问题是使用{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

请你也试试下面的

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

上述代码应该在函数中发现真实条件时添加变量count,您可以在函数本身中增加它的值,最后您可以在awk代码的末尾块中打印它。

您也可以尝试以下内容吗

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

上述代码应该在函数中发现真实条件时添加变量count,您可以在函数本身中增加它的值,最后您可以在awk代码的结束块中打印它。

预期的输出是什么?您不会从函数中返回任何内容,但仍然可以打印。如果只需要计数,请删除打印。删除{print root$1}中的打印。这会打印一个空行,因为函数根不返回任何内容,如果它确实返回了某些内容,则会打印出来。它成功了,谢谢@JamesBrownOK,我想我现在明白了。因此,打印会导致打印一行,而不需要实际运行root。很好的解释。所以打印会导致打印一行。是的。我怀疑你的理解可能有更多的漏洞,所以我建议你买一本Arnold Robbins的《有效的Awk编程》,第四版。预期的输出是什么?您不会从函数中返回任何内容,但仍然可以打印。如果只需要计数,请删除打印。删除{print root$1}中的打印。这会打印一个空行,因为函数根不返回任何内容,如果它确实返回了某些内容,则会打印出来。它成功了,谢谢@JamesBrownOK,我想我现在明白了。因此,打印会导致打印一行,而不需要实际运行root。很好的解释。所以打印会导致打印一行。是的。我怀疑你的理解可能有更多的漏洞,所以我建议你买一本Arnold Robbins的《有效的Awk编程》,第四版。这本书并没有超出范围。count需要像函数rootx一样定义,count就是这样的。是的,awk函数a{count++}BEGIN{a;print count}实际上打印1。我很惊讶。谢谢你的邀请hint@hek2mgl,在第二个解决方案中,sqrtx应更改为sqrt$1,先生。@hek2mgl就您的惊讶发表了评论。除函数参数外,所有awk变量都是全局变量,因此如果您希望在函数中使用局部变量,则只需将其添加到实际函数参数之后的函数参数列表中,按照惯例,通过制表符或多个空白字符将其与前导实数参数隔开。awk'函数foorelarg,imlocal{imlocal=imglobal=realarg}BEGIN{foo7;print imlocal,imglobal}'将输出7,因为在foo内部,变量imlocal是foo的局部变量,而在它外部,imlocal是不同的,相同名称的全局变量。在其他语言中,您可能需要一个不同的决策,但对于像awk这样的小型、重点文本处理语言,除非声明为local,否则IMHO将所有变量设置为全局变量是正确的决策。我个人更喜欢用一种明确的方式来实现,而不是将它们添加到函数arg列表中,但是nbd和我理解他们为什么这样做,因为他们必须为真正的函数arg创建本地范围,所以我希望实现实际上是免费的。这并没有超出范围。count需要像函数rootx一样定义,count就是这样的。是的,awk函数a{count++}BEGIN{a;print count}实际上打印1。我很惊讶。谢谢你的邀请hint@hek2mgl,在第二个解决方案中,sqrtx应更改为sqrt$1,先生。@hek2mgl就您的惊讶发表了评论。除函数参数外,所有awk变量都是全局变量,因此如果您希望在函数中使用局部变量,则只需将其添加到实际函数参数之后的函数参数列表中,按照惯例,通过制表符或多个空白字符将其与前导实数参数隔开。awk'函数foorelarg,imlocal{imlocal=imglobal=realarg}BEGIN{foo7;print imlocal,imglobal}'将输出7,因为在foo内部,变量imlocal是foo的局部变量,而在它外部,imlocal是不同的,相同名称的全局变量。在其他语言中,您可能需要不同的决策,但除非声明为局部变量,否则所有变量都是全局变量
一种小型的、集中的文本处理语言,如awk,的ht决策。我个人更喜欢用一种明确的方式来实现这一点,而不是将它们添加到函数arg列表中,但nbd和我理解他们为什么这样做,因为他们必须为真正的函数arg创建本地作用域,所以我希望实现实际上是免费的。@hek2mgl,现在当然可以编辑了,谢谢你让我知道。@hek2mgl,现在当然可以了,谢谢你让我知道。