我有一个具有ID,人口,地区和省份的列表,看起来像这样:

1:517000:405212:Newfoundland and Labrador
2:137900:5660:Prince Edward Island
3:751400:72908:New Brunswick
4:938134:55284:Nova Scotia
5:7560592:1542056:Quebec
6:12439755:1076359:Ontario
7:1170300:647797:Manitoba
8:996194:651036:Saskatchewan
9:3183312:661848:Alberta
10:4168123:944735:British Comumbia
11:42800:1346106:Northwest Territories
12:31200:482443:Yukon Territories
13:29300:2093190:Nunavut


我需要显示人口密度最低和最高的省份名称(人口/区域)。如何将第1列除以第2列(小数点后2位),但文件信息的两边都完整无缺(例如1:1.28:Newfoundland和Labrador)。之后,我认为我可以将其泵入sort -t: -nk2 | head -n 1sort -t: -nrk2 | head -n 1来拉动它们。

给出的推荐命令是grep。

最佳答案

由于您似乎可以控制排序和提取,因此以下是一个适用于您的示例awk脚本:

#!/usr/bin/env awk -f

BEGIN {
    FS=":"
    OFS=":"
    OFMT="%.2f"
}

{
    print $1,$2/$3,$4
}

07-24 09:37