回答:
Brandon Xavierが指摘したように、コードの問題は、gsub
単なる一致をカウントしないことです。実際にそれらを置き換えます。したがって、たとえば、
{
print
print gsub("t", "")
print
print gsub("t", "")
print
print "----------"
}
印刷します
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
----------
入力データの破損を気にしない場合(つまり、t
sをカウントすることだけが必要な場合)、Brandonの提案を使用できます。
{
x = gsub("t", "")
print x
b=b+x
}
END {print b}
おそらく、冗長なgsub
呼び出しを排除する限り、上記が最良の答えです。(次のアプローチでは、まだ2つの呼び出しを使用していgsub
ます。)
新しい変数の追加を避けたい場合は、置換を非破壊的にすることでそれを行うことができます。
{
key="t"
print gsub(key, key)
b=b+gsub(key, key)
}
END {print b}
つまり、t
sを自分自身で置き換えます。2番目のを実行しても、それらはそのままですgsub
。(それ自体を使用gsub(key, "&")
して置き換えることもできkey
ます。)
別のアプローチはgsub
、実際の入力行以外のものを最初に変更することです。
{
temp=$0
print gsub("t", "", temp)
b = b + gsub("t", "")
}
END {print b}