考虑到可能会重复相同的位置,如何在 awk 中添加具有正确顺序的新列

How to add a new column with the correct order in awk taking into account that the same position may be repeated

我正在尝试为一系列百万富翁生成一个具有新排名位置的新专栏。问题是他们中的许多人拥有相同数量的钱,当我生成一个顺序如下的列表时:NR>1{[=12=]=[=12=]", "NR-1} 1,如果有超过一两个百万富翁,它不会考虑我同样的钱。

我想做的是订购这样的东西:

Name;Company;Billions    
Bill Gate;Microsoft;76
Manolo Chocolatero;Churrerias;2
Eduardo Mendoza;ED S.A;3
Juan Palotes;Circos S.A;2

输出:

Name;Company;Billions;Ranking    
Bill Gate;Microsoft;76;1
Manolo Chocolatero;Churrerias;3;2
Eduardo Mendoza;ED S.A;2;3
Juan Palotes;Circos S.A;2;3

知道如何用 awk 做到这一点吗?

awk 允许您使用变量,例如一个用于排名,一个用于最后一个值。这样,只有当当前值与上一个值不同时,您才能提高排名(假设您之前对输入进行了排序)。

awk -F\; -v OFS=\; 'NR == 1 { $(NF + 1) = "Ranking" }
            NR > 1 { ++a[$NF]; $(NF + 1) = length(a) } 1' file

如果未排序,则应用排序。