【发布时间】:2015-06-29 07:25:57
【问题描述】:
我正在使用 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 中将字符串转换为 int。谢谢!