sed 또는 awk를 사용하여 패턴이 포함된 반복 줄 끝에 숫자를 추가하는 방법

sed 또는 awk를 사용하여 패턴이 포함된 반복 줄 끝에 숫자를 추가하는 방법

다음을 포함하는 .txt 파일이 있습니다.

>ABC
hello
>ABC
thanks
>ABC
for
>ABC
your
>ABC
help

">"가 포함된 반복 문자열을 다음으로 변경하고 싶습니다.

>ABC_1
hello
>ABC_2
thanks
>ABC_3
for
>ABC_4
your
>ABC_5
help

답변1

$ awk '{print $0 (/^>/ ? "_" (++c) : "")}' file
>ABC_1
hello
>ABC_2
thanks
>ABC_3
for
>ABC_4
your
>ABC_5
help

첫 번째 필드가 다양할 수 있고 각 첫 번째 필드 값에 대해 고유한 개수를 원하는 경우 간단히 첫 번째 필드로 인덱싱된 배열로 개수를 설정할 수 있습니다.

$ cat file
>ABC
hello
>FOO
thanks
>ABC
for
>ABC
your
>FOO
help

$ awk '{print $0 (/^>/ ? "_" (++c[$1]) : "")}' file
>ABC_1
hello
>FOO_1
thanks
>ABC_2
for
>ABC_3
your
>FOO_2
help

답변2

그리고 awk:

awk '
  NR==FNR && index($0, ">")==1 { a[$0]++ }
  NR!=FNR && a[$0]>1 { $0=$0"_"(++b[$0]) }
  NR!=FNR
' file file

첫 번째 읽기에서는 로 시작하는 각 줄에 대해 file배열의 카운터를 증가시킵니다 . 두 번째로 읽을 때 지정된 행의 카운터가 1보다 큰지 테스트합니다. true인 경우 배열의 카운터를 증가시키고 접미사 및 카운터 값을 추가합니다. 그런 다음 라인을 인쇄하십시오.a>
fileb_

관련 정보