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构造通常是不必要的-这是相当主观的意见