加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – awk:在列中找到最小值和最大值

发布时间:2020-12-15 18:56:56 所属栏目:安全 来源:网络整理
导读:我正在使用 awk处理一个简单的.dat文件,该文件包含几行数据,每行有4列,由一个空格分隔. 我想找到第一列的最小值和最大值. 数据文件如下所示: 9 30 8.58939 167.7599 38 1.3709 164.31810 30 6.69505 169.52910 31 7.05698 169.42511 30 6.03872 169.09511 3
我正在使用 awk处理一个简单的.dat文件,该文件包含几行数据,每行有4列,由一个空格分隔.
我想找到第一列的最小值和最大值.

数据文件如下所示:

9 30 8.58939 167.759
9 38 1.3709 164.318
10 30 6.69505 169.529
10 31 7.05698 169.425
11 30 6.03872 169.095
11 31 5.5398 167.902
12 30 3.66257 168.689
12 31 9.6747 167.049
4 30 10.7602 169.611
4 31 8.25869 169.637
5 30 7.08504 170.212
5 31 11.5508 168.409
6 31 5.57599 168.903
6 32 6.37579 168.283
7 30 11.8416 168.538
7 31 -2.70843 167.116
8 30 47.1137 126.085
8 31 4.73017 169.496

我使用的命令如下.

min=`awk 'BEGIN{a=1000}{if ($1<a) a=$1 fi} END{print a}' mydata.dat`
max=`awk 'BEGIN{a=   0}{if ($1>a) a=$1 fi} END{print a}' mydata.dat`

但是,输出是min = 10和max = 9.

(类似的命令可以返回第二列的正确最小值和最大值.)

有人能告诉我哪里错了吗?谢谢!

Awk猜测了这种类型.

字符串“10”小于字符串“4”,因为字符“1”在“4”之前.
强制进行类型对话,使用零加:

min=`awk 'BEGIN{a=1000}{if ($1<0+a) a=$1} END{print a}' mydata.dat`
max=`awk 'BEGIN{a=   0}{if ($1>0+a) a=$1} END{print a}' mydata.dat`

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读