[Bash] Minimum, maximum, średnia


(Rdrfear) #1

Witam. Chciałbym dowiedzieć się co robię nie tak w programach, które napisałem i dlaczego.

Dostaję ze standardowego wejścia kilka liczb i muszę wypisać minimum, maksimum i średnią tych dwóch liczb.

Napisałem coś takiego:

#!/bin/bash


cat | sort -n | head -1

cat | sort -n | tail -1

i = head -1 + tail -1

sr = $i / 2

echo "$sr"

Niestety to nie działa, a ja nie mam pojęcia co jest nie tak - tymbardziej, że nie mogę znaleźć niczego w google.

Prosiłbym o jakieś rady.


([alex]) #2

Drugi cat czyta inną partię liczb ze standardowego wejścia.

Musisz je obrabiać jedną po drugiej lub najpierw zapisać do pliku.


(Rdrfear) #3

Postanowiłem zapisać najpierw dane do pliku. Kod wygląda tak:

#!/bin/bash


cat | sort -n > temp.txt

$min = cat | head -1 < temp.txt

$max = cat | tail -1 < temp.txt

i = $min + $max

sr = $i / 2

echo "$min"

echo "$max"

echo "$sr"

Jednak to nadal nie chce poprawnie działać. Ponadto mam jeszcze jedno pytanie - jak zrobić, żeby wynik był obcinany do całkowitych w kierunku 0?


(Sawyer47) #4

To co napisałęś to zdecydowanie nie jest bash, pomieszałeś tam trochę Perla/PHP. Kod może wyglądać tak

seq=$(cat|sort -n)

min=$(echo "$seq" | head -1)

max=$(echo "$seq" | tail -1)

avg=$(echo "($min+$max)/2" | bc -l)

echo $min

echo $max

echo $avg

Użycie pliku to raczej przesada. Równie dobrze można użyć jedynie awk do tego zadania.


(Rdrfear) #5

Dziękuję za rozwiązanie. Przydało mi się.


#6

rdrfear , proszę zapoznaj się z tą stroną oraz tym tematem, a następnie,używając przycisku image.php?album_id=20&image_id=4038