Tôi có một tập tin với một danh sách dài các số nguyên:Shell script: tìm giá trị lớn nhất trong một chuỗi các số nguyên mà không sắp xếp
10
4
66
....
Tôi muốn tìm giá trị lớn nhất sử dụng UNIX công cụ dòng lệnh. Tôi biết tôi có thể sử dụng sort
(và thực sự có giải pháp cho vấn đề này trên SO sử dụng sort
), nhưng đó là không hiệu quả, đòi hỏi O (N * log (N)) và nhiều bộ nhớ. Với một vòng lặp đơn giản, tôi sẽ có thể tìm thấy giá trị tối đa trong O (N) và một vài byte bộ nhớ.
Có vẻ như phải có một số chương trình ngoài đó (với tên như max
) thực hiện điều này ngoài hộp --- đúng không?
Tốt nhất! Lưu ý rằng ';' trước 'END' là không cần thiết. – fedorqui
Một nơi không thành công. Nếu bạn liệt kê các số nguyên chỉ có một giá trị và giá trị đó là 0. Đầu ra của bạn sẽ bị trống. Thực ra. Nếu bạn có bất kỳ danh sách giá trị duy nhất nào có giá trị <= 0 thì giá trị đó trống. Vì vậy, âm bản sẽ không hoạt động hoặc nó xuất hiện. Trên thực tế ... phủ định không làm việc ở tất cả với điều này (giá trị duy nhất hay không). – stuckj
Khi điều tra thêm, điều này không thành công nếu các giá trị duy nhất trong danh sách của bạn là <= 0 vì bạn không khởi tạo x. Bạn có thể giải quyết điều đó bằng 'awk 'BEGIN {x = <>}; $ 0> x {x = $ 0}; END {print x}'' trong đó <> là một số thực sự âm. Ví dụ: 'awk' BEGIN {x = -2147483648}; $ 0> x {x = $ 0}; END {print x} ''giả định phiên bản awk được biên dịch với các giá trị 32 bit cho các biến. –
stuckj