AWK?在包含符号的每一行附加一个增量编号

时间:2018-03-09 18:34:59

标签: awk sed grep

我有一个序列文件。

>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

我想在每个">"之后添加一个递增的增量数字。

例如:

输出文件:

>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

在搜索完互联网后到目前为止,我已尝试过:

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

它并没有做任何事情。我做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:4)

Try:

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

For example:

$ 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)}

    This selects lines that contain >. For those lines, we replace the line $0 with > followed by ++i (which is the value of the variable i after it has been incremented) followed by the current line starting at its second character.

  • 1

    This is awk's shorthand for print-the-line.

答案 1 :(得分:3)

你可以尝试

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

答案 2 :(得分:1)

略有不同:

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

那使用">"作为字段分隔符,并使用字段数作为条件。