awk 하위 함수를 사용하여 fasta 헤더의 순차적 번호 매기기

awk 하위 함수를 사용하여 fasta 헤더의 순차적 번호 매기기

저는 쉘 스크립팅을 처음 접했고 fasta 파일의 헤더 번호를 순차적으로 매기려고 합니다. 내 fasta 파일의 순서는 다음과 같습니다.

>Rodentia sp. 
MALWILLPLLALLILWGPDPAQAFVNQHLCGSHLVEALYILVCGERGFFYTPMSRREVED
PQVGQVELGAGPGAGSEQTLALEVARQARIVQQCTSGICSLYQENYCN

>Ovis aries
MALWTRLVPLLALLALWAPAPAHAFVNQHLCGSHLVEALYLVCGERGFFYTPKARREVEG
PQVGALELAGGPGAGGLEGPPQKRGIVEQCCAGVCSLYQLENYCN

쉘 스크립트에서 awk를 사용하여 ">" 뒤에 1부터 n(n은 시퀀스 번호)까지 숫자를 삽입하여 헤더에 순차적으로 번호를 매기고 싶습니다. 그러면 시퀀스는 다음과 같습니다.

> 1 Rodentia sp. 
MALWILLPLLALLILWGPDPAQAFVNQHLCGSHLVEALYILVCGERGFFYTPMSRREVED
PQVGQVELGAGPGAGSEQTLALEVARQARIVQQCTSGICSLYQENYCN

> 2 Ovis aries
MALWTRLVPLLALLALWAPAPAHAFVNQHLCGSHLVEALYLVCGERGFFYTPKARREVEG
PQVGALELAGGPGAGGLEGPPQKRGIVEQCCAGVCSLYQLENYCN

이를 위해 awk의 sub 함수를 사용해 ">"의 각 인스턴스를 ">[a number]"로 바꾸었습니다.

awk '/>/{sub(">", "> ++i ")}1' file

그러나 awk에서 sub 함수를 사용하여 변수를 증가시키는 방법을 이해하지 못합니다. sub 함수를 사용하여 이 작업을 수행할 수 있는 방법이 있는지 궁금합니다. sub가 어떻게 작동하는지 이해하지만 변수가 올바르게 증가하도록 선언하는 방법을 모르겠습니다.

쉘 스크립트 시작 부분에서 i를 1로 선언합니다.

i=1

그러나 하위 함수에서 얻은 출력은 다음과 같습니다.

> ++$i Rodentia sp. 
> ++$i Ovis aries 

awk sub 함수를 사용하여 제목에 번호를 매길 수 있도록 변수를 올바르게 선언하려면 어떻게 해야 합니까?

답변1

거의 다 끝났습니다. ++i인용된 부분 문자열 외부에 있는 내용을 "> ++i"가져가세요 "> " ++i.

awk '/^>/{sub(">", "> "++i " ")}1' infile

답변2

αГsнιn이 지적했듯이, ++i리터럴 문자열의 일부로 삽입됩니다.

더 예뻐 보일 수 있는 또 다른 솔루션:

awk -F '>' '/^>/ { $1 = "> " ++i } { print }' file.fa

{ print }또는 약어 를 선호하는 경우

awk -F '>' '/^>/ { $1 = "> " ++i } 1' file.fa

이는 입력 필드 구분 기호로 사용되며 헤더 줄의 첫 번째 필드( >비어 있는 입력의 이전 비트)를 원하는 문자열로 바꿉니다.>

관련 정보