linux - Bash 脚本 - 将第 2 列除以中间的列,但将 1 和 4 保留在两侧

标签 linux bash

我有一个包含 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 列(小数点后两位),但保持两侧的文件信息完整(例如 1:1.28:纽芬兰和拉布拉多)。之后我想我可以将它放入 sort -t: -nk2 | head -n 1 和 sort -t: -nrk2 | head -n 1 来拉它们。

推荐的命令是 grep。

最佳答案

由于您似乎可以控制排序和提取,因此这里有一个应该适合您的 awk 脚本示例:

#!/usr/bin/env awk -f

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

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

关于linux - Bash 脚本 - 将第 2 列除以中间的列,但将 1 和 4 保留在两侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16051887/

相关文章:

java - 不支持登录方式! JavaMail、Dovecot、CentOS 7

linux - pdf = rs.getBytes ("pdf");它在 Windows 操作系统中不起作用。从 postgres bytea 字段读取二进制数据的替代方法是什么

java - 系统如何显示tomcat内存?

bash - 没有匹配文件时如何跳过for循环?

linux - Pam.exec 退出代码 8

c++ - 在 Linux 上修改 C++ 名称时,什么算作符号?

c - 文件描述符有效,但调用 read() 返回 -1

linux - Awk:如何跨列计算字符串的出现次数并找到跨行的最大值?

linux - 如何利用过滤器

bash - 在 bash 中生成随机字符