通过bash从文件中找到最大的数字

时间:2017-10-25 04:47:51

标签: bash

我想从文件中找到最大的值,文件如下:

1
2
3
1
2
3
4
5
1
2
3

我的代码如下(max.sh):

#!/usr/bin/bash

max=1
cat ./num | while read line; do
    if [ $line -gt $max ]; then
        max=$line
    fi
done
echo $max

但是当我bash -x max.sh时,输出为:

+ max=1
+ cat ./num
+ read line
+ '[' 1 -gt 1 ']'
+ read line
+ '[' 2 -gt 1 ']'
+ max=2
+ read line
+ '[' 3 -gt 2 ']'
+ max=3
+ read line
+ '[' 1 -gt 3 ']'
+ read line
+ '[' 2 -gt 3 ']'
+ read line
+ '[' 3 -gt 3 ']'
+ read line
+ '[' 4 -gt 3 ']'
+ max=4
+ read line
+ '[' 5 -gt 4 ']'
+ max=5
+ read line
+ '[' 1 -gt 5 ']'
+ read line
+ '[' 2 -gt 5 ']'
+ read line
+ '[' 3 -gt 5 ']'
+ read line
+ echo 1
1

它看起来最大值得到最大值,但为什么max的最后一个回声是1?

1 个答案:

答案 0 :(得分:2)

你得到1的值,因为你正在使用一个不必要的管道,这使得while循环在子shell中执行,因此max的值在子shell本身中丢失了循环后,在父shell中得到预设值1

最好使用awk

awk 'min == "" || $1<min{min=$1} $1>max{max=$1} END{print min, max}' file

5