Awk? Add incremental number to each line containing character

I have a sequence file.

>seqA
lakjdsflakjsdlkjals;dkjfal;kdjsfl;aksdjf;lakjsdfl;kjalsdkjf
alsdkjfalskdjf;alsdfj;alkdjsf;lakjsdf;lkajsd
>seqB
fjal;kdjsfla;kdjsflkajdslkjfaghal;sdkjg
>seqC
a;lksdjl;akjsdg;lkjsdfl;kajdsl;kgj;alkdjsg;lkajsdgl
lsdkfja;lksdjf;lakdjsf;lkajsdfl;kjal;sdkfjal;skdjak
sdkjfal;ksdjflk;ahdglkahsdl;kghalk

I want to add an increasing incremental number after each ">"

For instance:

Output file:

>1seqA
lakjdsflakjsdlkjals;dkjfal;kdjsfl;aksdjf;lakjsdfl;kjalsdkjf
alsdkjfalskdjf;alsdfj;alkdjsf;lakjsdf;lkajsd
>2seqB
fjal;kdjsfla;kdjsflkajdslkjfaghal;sdkjg
>3seqC
a;lksdjl;akjsdg;lkjsdfl;kajdsl;kgj;alkdjsg;lkajsdgl
lsdkfja;lksdjf;lakdjsf;lkajsdfl;kjal;sdkfjal;skdjak
sdkjfal;ksdjflk;ahdglkahsdl;kghalk

So far, after cleaning the Internet, I have tried:

awk -F "i=1" '{if (/>/){print $0i++} else print}'

and he did nothing. What am I doing wrong?

Thank!

+4
source share
3 answers

Try:

awk '/>/{$0 = ">" ++i substr($0, 2)} 1'

For instance:

$ awk '/>/{$0 = ">" ++i substr($0, 2)} 1' file
>1seqA
lakjdsflakjsdlkjals;dkjfal;kdjsfl;aksdjf;lakjsdfl;kjalsdkjf
alsdkjfalskdjf;alsdfj;alkdjsf;lakjsdf;lkajsd
>2seqB
fjal;kdjsfla;kdjsflkajdslkjfaghal;sdkjg
>3seqC
a;lksdjl;akjsdg;lkjsdfl;kajdsl;kgj;alkdjsg;lkajsdgl
lsdkfja;lksdjf;lakdjsf;lkajsdfl;kjal;sdkfjal;skdjak
sdkjfal;ksdjflk;ahdglkahsdl;kghalk

How it works

  • />/{$0 = ">" ++i substr($0, 2)}

    Here, the rows containing are selected >. For these lines, we replace the line $0with >followed by ++i(this is the value of the variable iafter it has been incremented), followed by the current line starting with its second character.

  • 1

    This is short for awk for printing. A.

+4
source

You can try

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

:

awk -F'>' -v OFS='>' 'NF == 2 {$2 = ++count $2} 1' file

" > " ​​ .

+1
source

Source: https://habr.com/ru/post/1694699/


All Articles