我有一个看起来像这样的文件:
Level,Member
HIGH,John
HIGH,John
HIGH,Paul
HIGH,George
REG,George
REG,George
REG,George
REG,John
REG,Paul
REG,Paul
REG,Ringo
如果我想在第二列中附加数据出现的计数,那么效果很好:
awk 'BEGIN{ FS=OFS="," }{ $0=$0 OFS (++a[$2]) }1' file
但我无法弄清楚如何添加if / else语句,以便我可以有条件地按级别计数,以便我的输出看起来像这样:
Level,Member,1
HIGH,George,1
HIGH,John,1
HIGH,John,2
HIGH,Paul,1
REG,George,1
REG,George,2
REG,George,3
REG,John,1
REG,Paul,1
REG,Paul,2
REG,Ringo,1
请注意,当电平从HIGH变为REG时,计数会重新开始。该文件已按级别排序,然后按成员排序。
答案 0 :(得分:2)
或只是..
$ awk '{$0=$0","++a[$0]}1' file
Level,Member,1
HIGH,John,1
HIGH,John,2
HIGH,Paul,1
HIGH,George,1
REG,George,1
REG,George,2
REG,George,3
REG,John,1
REG,Paul,1
REG,Paul,2
REG,Ringo,1
答案 1 :(得分:2)
保持简单:
awk '{print $0","(++c[$0])}'
答案 2 :(得分:1)
你的命令已经很好了。我刚刚更改了关联数组的关键字a []:
awk 'BEGIN{ FS=OFS="," }{ $0=$0 OFS (++a[$2$1]) }1' file
或:
awk 'BEGIN{ FS=OFS="," }{ $0=$0 OFS (++a[$0]) }1' file