我正在尝试计算正一(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
我们将不胜感激任何帮助。
答案 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