所有线路中最大和最小的

时间:2014-07-11 01:12:29

标签: linux bash shell awk

我有这样的输出

3.69
0.25
0.80
1.78
3.04
1.99
0.71
0.50
0.94

我想在上面的输出中找到最大数字和最小数字

我需要输出

smallest is 0.25 and biggest as 3.69

5 个答案:

答案 0 :(得分:2)

首先对输入进行排序并打印第一个和最后一个值。一种方法:

$ sort file | awk 'NR==1{min=$1}END{print "Smallest",min,"Biggest",$0}' 
Smallest 0.25 Biggest 3.69

答案 1 :(得分:1)

希望得到这个帮助。

OUTPUT="3.69 0.25 0.80 1.78 3.04 1.99 0.71 0.50 0.94"
SORTED=`echo $OUTPUT | tr ' ' '\n' | sort -n`
SMALLEST=`echo "$SORTED" | head -n 1`
BIGGEST=`echo "$SORTED" | tail -n 1`

echo "Smallest is $SMALLEST"
echo "Biggest is $BIGGEST"

添加了操作系统的awk oneliner请求。

我不擅长awk,但无论如何这都有用。 :)

echo "3.69 0.25 0.80 1.78 3.04 1.99 0.71 0.50 0.94" | awk '{
    for (i=1; i<=NF; i++) {
        if (length(s) == 0) s = $i;
        if (length(b) == 0) b = $i;
        if ($i < s) s = $i;
        if (b < $i) b = $i;
    }
    print "Smallest is", s;
    print "Biggest is", b;
}'

答案 2 :(得分:1)

您想要一个awk解决方案吗?

echo "3.69 0.25 0.80 1.78 3.04 1.99 0.71 0.50 0.94" | \
    awk -v RS=' ' '/.+/ { biggest = ((biggest == "") || ($1 > biggest)) ? $1 : biggest;
                         smallest = ((smallest == "") || ($1 < smallest)) ? $1:smallest}
                  END { print biggest, smallest}'

产生以下输出:

3.69 0.25

答案 3 :(得分:0)

您也可以使用此方法

sort file  | echo -e `sed -nr '1{s/(.*)/smallest is :\1/gp};${s/(.*)/biggest no is :\1/gp'}`

答案 4 :(得分:0)

TXR解决方案:

$ txr -e '(let ((nums [mapcar tofloat (gun (get-line))]))
            (if nums
              (pprinl `smallest is @(find-min nums) and biggest is @(find-max nums)`)
              (pprinl "empty input")))'
0.1
-1.0
3.5
2.4
smallest is -1.0 and biggest is 3.5