Itse taas avaan mielelläni vastaukset, jolloin kysyjällä ja muilla aiheeseen eksyvillä on mahdollisuus oppia jotain. Tässä hieman erilainen ratkaisu.
Jos kaikki numerot ovat samassa "sarakkeessa", kuten esimerkkisyötteessä, jossa kaksoispiste on sarakkeiden erottaja, operaatio onnistuu komennoilla cut, sort ja tail, jotka kuuluvat Unixin perustyökaluihin:
cut -d : -f 2 tiedosto.txt | sort -n | tail -n 1
Tässä cut-komennolla leikataan syötteestä toinen sarake. Parametri -d : asettaa sarakkeiden erottajaksi (delimiter) kaksoispisteen ja -f 2 valitsee toisen sarakkeen/kentän.
Seuraavaksi sarake putkitetaan sort-komennolle, joka järjestää alkiot pienimmästä suurimpaan. Parametri -n valitsee kokonaislukujen numeerisen sorttauksen, joka järjestää esimerkiksi arvot 99 ja 100 oikeaan numeeriseen järjestykseen toisin kuin merkkijonosorttaus. AimoE:n ehdottama parametri -g toimii myös; se osaa sortata kokonaislukujen lisäksi liukuluvutkin.
Lopuksi tail-komennolla leikataan järjestetystä listasta viimeinen eli suurin arvo ja tulostetaan se. Tuloksen voi sijoittaa muuttujan arvoksi tähän tapaan:
suurin=$(cut -d : -f 2 tiedosto.txt | sort -n | tail -n 1)
Yllä esitetty on koodin puolesta helppo tapa hoitaa homma, mutta sorttaus on suhteellisen raskas operaatio maksimin tai minimin etsimiseen. Sen sijaan riittää käydä lista kerran läpi ja verrata jokaisessa kohdassa listan arvoa aiemmin löydettyyn maksimiarvoon. Alussa maksimiksi asetetaan nolla (tai negatiivisten lukujen tapauksessa pienin mahdollinen arvo). Koodia:
file="tiedosto.txt"
column=$(cut -d : -f 2 "$file")
max=0
for val in $column; do
if [ "$val" -gt "$max" ]; then
max="$val";
fi
done
echo "$max"
Lisäksi ohjelmaan voi joutua tekemään tarkistuksen tilanteelle, jossa listassa ei ole ainuttakaan lukua. Silloin ei välttämättä haluta palauttaa arvoa 0 vaan tehdään jotain muuta.