我承认awk实在太高深,在这方面只能做script kid。
大部分的网上中文文章都给出了清一色的答案,如下:
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'
在Linux服务器跑确实是有错!小峰JoysBoy@小峰网络遨游记的Awk求最大值正解所讲的。
经过一论调试,把当前的值与max同时打印出来。
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi;print $11" "max}'
发现中文网站上讲的{if ($1>max) max=$1 fi}在AIX上测试是正确的,在Linux上是错误。
但是觉得如果一定要+0操作来做数据类型转换的话,AWK也太坑爹了!再深入看一下语法,发现awk的The if
–else
Statement语法里面并没有if……fi这个写法。然后再Linux上把fi删除后跑。
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 ;print $11" "max}'
这个是正确的。使用英文搜索“awk max value in column”,确实基本上是if ($1>max) max=$1的写法,但是没有fi。至于fi在awk里面是什么意思没有找到解析。
不求甚解用脚本确实有风险!要以此为戒!
看了下我自己的文章,里面的确多了个fi。。。写那文章是同事想用awk获取最大值,发现网上的方法都错的,我改了下做类型转换成功了,命令是基于同事命令改的,当时没注意还有个fi,估计写shell写习惯了加个if关闭,感谢指正