Tag: maximum

  • Getting The Maximum Of A Set Of Numbers

    damascus-unix-prompt

    You have a a column of numbers that you have produced in some manner such as :-

    $ awk '/clean message/ {print $(NF-1)}' mail.info.log
    ...
    100935
    12197
    3606
    84653
    4498
    99110
    4762
    3001
    10889
    12611
    12249
    12245
    136599
    49097
    6668
    

    And you want a quick and dirty way of finding the largest number. Well there is a way but it is perhaps the least efficient way to do it, and that is to sort the numbers into numerical order and use “head” to display the first one :-

    $ awk '/clean message/ {print $(NF-1)}' mail.info.log | sort -rn | head -1
    5476168
    

    But frankly there must be a better method. And yes there is if you happen to be using zsh (or possibly others, but this has been tested with zsh). Simply iterate over the values assigning the current value to the “max” variable if the current variable is larger :-

    $ max=0; for x in $(awk '/clean message/ {print $(NF-1)}' mail.info.log); [[ $x -gt $max ]] && max=$x; echo $max
    5476168

    You may be wondering why I don’t simply use the ability of awk to perform calculations. Well that is certainly possible, but I may not always be using awk to produce the numbers in the first place, and this is supposed to be a generic recipe.