Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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
Awk 只计算正数的出现次数_Awk_Count - Fatal编程技术网

Awk 只计算正数的出现次数

Awk 只计算正数的出现次数,awk,count,Awk,Count,我试图计算正1的发生率,但我的行中也有负1-1,这就是为什么它给我累计计数 例如: 脚本: awk -F'|' 'BEGIN{print "count", "lineNum"}{print gsub(/1/,"") "\t" NR}' input_file 1 1 1 -1 -1 -1 0 0 -1 0 0 -1 -1 -1 0 0 1 1 0 -1 -1 -1 0 0 0 1 1 -1 -1 -1 0 0

我试图计算正1的发生率,但我的行中也有负1-1,这就是为什么它给我累计计数

例如:

脚本:

awk -F'|' 'BEGIN{print "count", "lineNum"}{print gsub(/1/,"") "\t" NR}' input_file


1   1   1   -1  -1  -1  0   0
-1  0   0   -1  -1  -1  0   0
1   1   0   -1  -1  -1  0   0
0   1   1   -1  -1  -1  0   0
计数:

6
4
5
5
使用此命令,我只能找到负1-1的计数:

awk -F'|' 'BEGIN{print "count", "lineNum"}{print gsub(/\-1/,"") "\t" NR}' input_file
计数为负1-1

3
4
3
3
但无法找到所需的仅为正的计数1

所需计数:

3
0
2
2

如果您能使用这些条目,我们将非常感谢您。然后使用gsub获取行中剩余正1的计数:

$ awk '{print gsub(/(^|[^-])1/,"")}' file
3
0
2
2
echo "1   1   1   -1  -1  -1  0   0
-1  0   0   -1  -1  -1  0   0
1   1   0   -1  -1  -1  0   0
0   1   1   -1  -1  -1  0   0" >file

$ gawk '{gsub(/-1\>/,""); print gsub(/\<1\>/,"1")}' file 
3
0
2
2
使用POSIX awk,您可以循环字段并检查值。如果这是你所追求的,数一数:

$ awk '{cnt=0; for (i=1;i<=NF;i++) if ($i+0==1) cnt++; print cnt}' file
3
0
2
2

使用GNUAWK,如果可能的话,您可以使用分词断言来最终查找-1 vs-11。然后使用gsub获取行中剩余正1的计数:

echo "1   1   1   -1  -1  -1  0   0
-1  0   0   -1  -1  -1  0   0
1   1   0   -1  -1  -1  0   0
0   1   1   -1  -1  -1  0   0" >file

$ gawk '{gsub(/-1\>/,""); print gsub(/\<1\>/,"1")}' file 
3
0
2
2
使用POSIX awk,您可以循环字段并检查值。如果这是你所追求的,数一数:

$ awk '{cnt=0; for (i=1;i<=NF;i++) if ($i+0==1) cnt++; print cnt}' file
3
0
2
2

您不需要在regexp中转义-除非它在括号表达式中,而不是在它的开头或结尾,然后一些AWK可能允许您转义它,而不是将它放在它所属的开头或结尾。文件中是否只有-1、1和0?你对-11有什么期望?1a?a-1?@Waqas Khokar,通过查看您的个人资料可以看出您从未选择任何答案作为正确答案,请从所有答案中选择一个答案作为正确答案,以完全关闭线程。您不需要转义-在regexp中,除非它在括号表达式中,而不是在它的开头或结尾,然后一些AWK可能会允许您转义它,而不是将它放在它所属的开头或结尾。文件中是否只有-1、1和0?你对-11有什么期望?1a?a-1?@Waqas Khokhar,通过查看您的个人资料,可以看出您从未选择任何答案作为正确答案,请从所有答案中选择一个答案作为正确答案,以完全关闭线程。如果“fail”意味着在那里计算三个1,而只有一个独立的“1”,则此操作将失败,输入值为11 12 0。诚然,这篇文章并不清楚这是否是需要的。考虑到样本输入和OP所说的脚本可以工作-1秒,我认为可以安全地假设输入是1、0和-1,正如问题中所示。如果“fail”意味着计算三个1,而只有一个独立的“1”,那么输入像1 11 12 0就会失败。诚然,这篇文章并不清楚这是否是需要的。考虑到示例输入和OP所说的脚本可以工作-1秒,我认为可以安全地假设输入是1、0和-1,正如问题中所示。