O problema com o seu código, como Brandon Xavier apontou ,
é que gsub
não corresponde apenas a contagem ; na verdade, substitui-os.
Então, por exemplo,
{
print
print gsub("t", "")
print
print gsub("t", "")
print
print "----------"
}
imprimiria
t t t t
4
0
----------
a t a ta
2
a a a
0
a a a
----------
ata ta a a
2
aa a a a
0
aa a a a
----------
Se você não se importar em corromper seus dados de entrada
(ou seja, se contar o t
s é a única coisa que você quer fazer com eles),
você pode usar a sugestão de Brandon:
{
x = gsub("t", "")
print x
b=b+x
}
END {print b}
O acima é, sem dúvida, a melhor resposta,
na medida em que elimina suas chamadas gsub
redundantes.
(As abordagens a seguir ainda usam duas chamadas para gsub
.)
Se você quiser evitar adicionar uma nova variável, você pode fazer isso fazendo a substituição não-destrutiva:
{
key="t"
print gsub(key, key)
b=b+gsub(key, key)
}
END {print b}
, por exemplo, substitua os t
s por si mesmos,
então eles ainda estão lá quando você faz o segundo gsub
.
(Você também pode usar gsub(key, "&")
para substituir key
por si mesmo.)
Outra abordagem é fazer com que o primeiro gsub
modificar algo diferente da linha de entrada real:
{
temp=$0
print gsub("t", "", temp)
b = b + gsub("t", "")
}
END {print b}