如何在行尾附加模式匹配数的计数器?

Roo*_*ola 1 bash awk sed

我试图在行尾附加模式匹配的计数器。

样本输入:

>first_match
a
b
>second_match
c
d
Run Code Online (Sandbox Code Playgroud)

想要的输出:

>first_match,1
a
b
>second_match,2
c
d
Run Code Online (Sandbox Code Playgroud)

我所做的是这个,但我不知道如何添加计数器:

sed '/>.*$/ s/$/,/' file
Run Code Online (Sandbox Code Playgroud)

dmc*_*kee 5

我注意到你已经标记了这个,但只在sed.

Awk 是一种不同的工具,具有不同的优势和局限性。特别是awk有一个更一般的变量概念然后sed做,这变得非常容易。

尝试:

awk '/^>/{printf("%s,%d\n",$0,++counter);next}{print $0}' file
Run Code Online (Sandbox Code Playgroud)

一个更“尴尬”的解决方案很简单:

awk '/^>/ { $0=$0 "," ++i }1' file
Run Code Online (Sandbox Code Playgroud)

两者都利用了未初始化变量的默认值。