Проблема с вашим кодом, как отметил Брэндон Ксавьер, в том, что 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), вы можете воспользоваться предложением Брэндона:
{
x = gsub("t", "")
print x
b=b+x
}
END {print b}
Вышесказанное является, пожалуй, лучшим ответом, поскольку оно устраняет ваши избыточные вызовы gsub
.
(Следующие подходы все еще используют два вызова gsub
.)
Если вы хотите избежать добавления новой переменной, вы можете сделать это, сделав замену неразрушающей:
{
key="t"
print gsub(key, key)
b=b+gsub(key, key)
}
END {print b}
т.е. заменить t
с собой, так что они все еще там , когда вы делаете второй gsub
(Вы также можете использовать gsub(key, "&")
для замены key
на себя.)
Другой подход заключается в том, чтобы заставить первый gsub
модифицировать что-то кроме фактической строки ввода:
{
temp=$0
print gsub("t", "", temp)
b = b + gsub("t", "")
}
END {print b}