如何使用 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
我正在尝试将一个数字附加到记录中,以指示特定值在文件中的特定列中出现了多少次。例如,假设我的文件如下所示:
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