Bash 如何使用awk追加字段的引用?

Bash 如何使用awk追加字段的引用?,bash,shell,awk,sed,gawk,Bash,Shell,Awk,Sed,Gawk,我试图在记录中附加一个数字,指示文件中某个特定列中某个特定值出现的次数。例如,假设我的文件如下所示: 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 Ri

我试图在记录中附加一个数字,指示文件中某个特定列中某个特定值出现的次数。例如,假设我的文件如下所示:

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
我希望输出一个如下所示的文件:

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="," }{ $0=$0 OFS (++a[$1]) }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 $0,(++a[$1]) }' file
使用awk:

awk 'BEGIN{FS=OFS=","} {print $1,$2,++counter[$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 约翰,吉他,1 约翰,声乐,2 约翰,钢琴,3岁 保罗,巴斯,1 保罗,声乐,2 乔治,吉他手,1 乔治,声乐,2 林戈,鼓,1 awk的另一种方式

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

更多相同:)
awk-F“,“$0=$0”,“++a[$1]”文件
顺便说一句,
BEGIN
构造通常是不必要的
awk{$++NF=++a[$1];print}'FS=,OFS=,file
是这里所需要的一切。@jthill,BEGIN构造通常是不必要的-这是相当主观的意见