awk/sed: 여러 다른 문자열에 카운터 추가

awk/sed: 여러 다른 문자열에 카운터 추가

텍스트 파일이 있고 관심 있는 여러 다른 문자열에 카운터를 추가하고 싶습니다. 한 가지 예 infile:

string_of_interest
abcd
efgh
another_string_of_interest
ijkl
abcd
another_string_of_interest
mnop
wxyz
string_of_interest
ijkl
wxyz
another_good_string
abcd
efgh
another_string_of_interest

보시다시피 무시할 문자열이 여러 개 있고 그 중 일부는 중복될 수 있지만 outfile다음과 같은 결과를 생성하기 위해 문자열 하위 집합의 반복 횟수만 계산하고 싶습니다.

string_of_interest_1
abcd
efgh
another_string_of_interest_1
ijkl
abcd
another_string_of_interest_2
mnop
wxyz
string_of_interest_2
ijkl
wxyz
another_good_string_1
abcd
efgh
another_string_of_interest_3

카운터는 스네이크 명명법을 사용하여 각 문자열의 일부로 추가됩니다.

나는 이리저리 더듬어 sed시도해 awk보았지만 너무 새롭고 가까운 곳이 없습니다. 어떤 제안이 있으십니까?

답변1

관심 있는 문자열의 모든 줄에 키 문자열이 포함되어 있는 경우"string", 다음과 같이 할 수 있습니다.

awk '/string/{ $0=$0 "_" ++seen[$0] }1' infile

그렇지 않으면 관심 있는 해당 문자열과 일치하는 각 행에 증분 카운터를 추가하는 다음 코드를 사용합니다.

awk '
    $0 == "string_of_interest" ||
    $0 == "another_string_of_interest" ||
    $0 == "another_good_string" { $0=$0 "_" ++seen[$0] } 1
' infile

관련 정보