考虑到可能会重复相同的位置,如何在 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
如果未排序,则应用排序。
我正在尝试为一系列百万富翁生成一个具有新排名位置的新专栏。问题是他们中的许多人拥有相同数量的钱,当我生成一个顺序如下的列表时: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
如果未排序,则应用排序。