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

How do I append the occurrence of a field using awk?

我正在尝试将一个数字附加到记录中,以指示特定值在文件中的特定列中出现了多少次。例如,假设我的文件如下所示:

John,Guitar
John,Vocals
John,Piano
Paul,Bass
Paul,Vocals
George,Guitar
George,Vocals
Ringo,Drums

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

John,Guitar,1
John,Vocals,2
John,Piano,3
Paul,Bass,1
Paul,Vocals,2
George,Guitar,1
George,Vocals,2
Ringo,Drums,1

如何在 awk 中实现这一点?我也愿意使用 shell 脚本或 sed 来回答,因为我只是猜测 awk 可能是处理这个问题的好方法。

Awk解法:

awk 'BEGIN{ FS=OFS="," }{ [=10=]=[=10=] OFS (++a[]) }1' file

输出:

John,Guitar,1
John,Vocals,2
John,Piano,3
Paul,Bass,1
Paul,Vocals,2
George,Guitar,1
George,Vocals,2
Ringo,Drums,1

print运算符相同:

awk 'BEGIN{ FS=OFS="," }{ print [=12=],(++a[]) }' file

使用 awk:

awk 'BEGIN{FS=OFS=","} {print ,,++counter[]}' file

输出:

John,Guitar,1
John,Vocals,2
John,Piano,3
Paul,Bass,1
Paul,Vocals,2
George,Guitar,1
George,Vocals,2
Ringo,Drums,1

awk 的另一种方式

awk '{b=[=10=];sub(",.*","");[=10=]=b","++c[[=10=]]}1' infile