我正在使用
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`