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

Bash 如何在行尾追加模式匹配数的计数器?,bash,sed,awk,Bash,Sed,Awk,我试图在行的末尾附加一个模式匹配的计数器 样本输入: >first_match a b >second_match c d 想要的输出: >first_match,1 a b >second_match,2 c d 我是这样做的,但我不知道如何添加计数器: sed '/>.*$/ s/$/,/' file 我注意到您已经标记了它,但只在sed中显示了示例 Awk是一种不同的工具,具有不同的优势和局限性。特别是awk比sed具有更一般的变量概念,这变得非常简单

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

样本输入:

>first_match
a
b
>second_match
c
d
想要的输出:

>first_match,1
a
b
>second_match,2
c
d
我是这样做的,但我不知道如何添加计数器:

sed '/>.*$/ s/$/,/' file

我注意到您已经标记了它,但只在
sed
中显示了示例

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

尝试:

一个更“尴尬”的解决方案是:

awk '/^>/ { $0=$0 "," ++i }1' file

这两种方法都利用了未初始化变量的默认值。

我注意到您已经对其进行了标记,但仅在
sed
中显示了示例

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

尝试:

一个更“尴尬”的解决方案是:

awk '/^>/ { $0=$0 "," ++i }1' file

这两种方法都利用了未初始化变量的默认值。

@dmckee您能解释一下他想要什么以及您解决了什么问题吗。我找不到他的问题和你解决的问题。这是一个文件还是一个命令提示符。我没有得到that@user19340357上面的代码将在unix命令提示符下逐字输入(BornerShell或csh派生代码都可以)。它们计算以
>
字符开头的行数,并使用附加的逗号和当前计数输出这些行。所有其他行均未经修改打印。我的版本应该非常简洁,因为它很幼稚。steve的版本紧凑而聪明,并且依赖于匹配的默认操作(即打印行),并且计算为逻辑真的
1
匹配所有行。@Dmcke你能解释一下他想要什么和你解决了什么吗。我找不到他的问题和你解决的问题。这是一个文件还是一个命令提示符。我没有得到that@user19340357上面的代码将在unix命令提示符下逐字输入(BornerShell或csh派生代码都可以)。它们计算以
>
字符开头的行数,并使用附加的逗号和当前计数输出这些行。所有其他行均未经修改打印。我的版本应该非常简洁,因为它很幼稚,steve的版本紧凑而聪明,并且依赖于匹配的默认操作(即打印行)以及计算为逻辑真的
1
匹配所有行的事实。