计算仅出现正数的次数

时间:2018-10-08 12:08:51

标签: awk count

我正在尝试计算正一(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)

3
4
3
3

但无法找到所需的仅正数(1)的计数

所需数量:

3
0
2
2

我们将不胜感激任何帮助。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

使用GNU awk,您可以使用分词断言来确定-1-11(如果可能的话)。然后使用gsub获取正数{ {1}}仍在该行中:

1

使用POSIX awk,您可以循环字段并检查值。如果您要寻找它们,请数一下:

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

答案 2 :(得分:0)

请您尝试以下。

awk '{for(i=1;i<=NF;i++){if($i==1){count++}};print count+0;count=0}'  Input_file

现在也添加非单一形式的解决方案。

awk '
{
  for(i=1;i<=NF;i++){
   if($i==1){
     count++
   }
  }
  print count+0
  count=0
}'  Input_file

输出如下。

3
0
2
2
相关问题