如何使用awk附加字段的出现?

gas*_*ro1 2 bash shell awk sed gawk

我试图在记录中附加一个数字,表示文件中特定列中特定值发生了多少次.例如,假设我的文件如下所示:

John,Guitar
John,Vocals
John,Piano
Paul,Bass
Paul,Vocals
George,Guitar
George,Vocals
Ringo,Drums
Run Code Online (Sandbox Code Playgroud)

我想要的是输出一个如下所示的文件:

John,Guitar,1
John,Vocals,2
John,Piano,3
Paul,Bass,1
Paul,Vocals,2
George,Guitar,1
George,Vocals,2
Ringo,Drums,1
Run Code Online (Sandbox Code Playgroud)

我如何在awk中实现这一目标?我也会接受使用shell脚本或sed的答案,因为我只是猜测awk可能是处理这个问题的好方法.

Rom*_*est 9

Awk 解:

awk 'BEGIN{ FS=OFS="," }{ $0=$0 OFS (++a[$1]) }1' file
Run Code Online (Sandbox Code Playgroud)

输出:

John,Guitar,1
John,Vocals,2
John,Piano,3
Paul,Bass,1
Paul,Vocals,2
George,Guitar,1
George,Vocals,2
Ringo,Drums,1
Run Code Online (Sandbox Code Playgroud)

与print运营商相同:

awk 'BEGIN{ FS=OFS="," }{ print $0,(++a[$1]) }' file
Run Code Online (Sandbox Code Playgroud)