2012-10-05 36 views
12

thể trùng lặp:
How to sort an array in BASHCách tìm số cao nhất trong một mảng?

Tôi có con số trong mảng 10 30 44 44 69 12 11.... Làm thế nào để hiển thị cao nhất từ ​​mảng?

echo $NUM //result 69 
+1

http://stackoverflow.com/questions/7442417/how-to-sort-an-array-in-bash – paul

+1

Những gì bạn có cố gắng cho đến nay? Hãy thử làm theo ví dụ [vịt cao su] (http://www.codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html). – Pureferret

Trả lời

26

Bạn có thể sử dụng sort để tìm hiểu.

#! /bin/bash 
ar=(10 30 44 44 69 12 11) 
IFS=$'\n' 
echo "${ar[*]}" | sort -nr | head -n1 

Ngoài ra, tìm kiếm tối đa bản thân:

max=${ar[0]} 
for n in "${ar[@]}" ; do 
    ((n > max)) && max=$n 
done 
echo $max 
+0

Cảm ơn bạn rất nhiều Và nếu có một chuỗi thay vì số? ar = ("dsasd" "dsdas" "dasdsadaasdadadsadad") – Charlie

+0

@Charlie: Sau đó, bạn có thể sử dụng so sánh chuỗi '[[$ n> $ max]]'. Ngoài ra, bạn có thể xóa khởi tạo tối đa. – choroba

+1

Hoặc có thể ar [0] nếu chỉ có một phần tử ... – choroba

2

thử điều này:

a=(10 30 44 44 69 12 11 100) 

max=0 
for v in ${a[@]}; do 
    if (($v > $max)); then max=$v; fi; 
done 
echo $max 

kết quả trong 100

+0

Đây là vấn đề tương tự như trong câu trả lời ở trên - có vấn đề với max = 0 - nếu tất cả các arg là âm? .. Đây là một giải pháp tốt hơn - https://stackoverflow.com/a/40719447/2107205 – mato

Các vấn đề liên quan