Shell脚本:在整数序列中查找最大值而不进行排序

时间:2012-08-13 09:40:38

标签: shell unix

我有一个包含很长整数列表的文件:

10
4
66
....

我想使用UNIX命令行工具找到最大值。我知道我可以使用sort(事实上,在使用sort的SO上有这个问题的解决方案,但这是低效的,需要O(N * log(N))和充足的内存。使用简单的for循环,我应该能够找到O(N)中的最大值和几个字节的内存。

似乎必须有一些程序(名称如max)开箱即用 - 这是真的吗?

4 个答案:

答案 0 :(得分:25)

试试这个:

awk '$0>x{x=$0};END{print x}' input.txt

[更新:

awk 'BEGIN{x=-2147483648};$0>x{x=$0};END{print x}' input.txt

初始化x允许解决方案正确处理值为< = 0的整数列表。有关更多详细信息,请参阅注释。

答案 1 :(得分:1)

awk '{if($1>a)a=$1;}END{print a}' temp3

答案 2 :(得分:0)

 max=1

 while read i
 do
  if [[ "$i" > "$max" ]]; then
     max="$i"
  fi
 done < a.txt

 echo "$max" > b.txt

a.txt是输入文件(每行都有一个整数)。 b.txt包含a.txt中的最大整数。

答案 3 :(得分:-1)

sort -nr inputfile.txt |头-1 其中inputfile.txt包含所有数字。