답변:
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
호출을 제거하는 한 가장 좋은 대답 입니다. (다음 방법은 여전히 두 번의 호출을 사용합니다 gsub
.)
새 변수를 추가하지 않으려면 대체를 비파괴 적으로 작성하면됩니다.
{
key="t"
print gsub(key, key)
b=b+gsub(key, key)
}
END {print b}
즉, t
s를 자신으로 교체 하므로 두 번째 작업을 수행 할 때 여전히 있습니다 gsub
. ( 자신 gsub(key, "&")
을 대신 key
하여 사용할 수도 있습니다 .)
또 다른 방법은 첫 번째를 gsub
실제 입력 행 이외의 것으로 수정하는 것입니다.
{
temp=$0
print gsub("t", "", temp)
b = b + gsub("t", "")
}
END {print b}
gsub는 발생 횟수 만 계산하는 것이 아니라 실제로이를 대체합니다. 거기에있는 첫 번째 인쇄 문 (아마도 디버깅 용)이 문을 깨고 있습니다.