Có một lệnh unix cung cấp tối thiểu / tối đa của hai số?


37

Tôi đang tìm kiếm một lệnh để giới hạn số lượng đọc từ stdin.

Tôi đã viết một kịch bản nhỏ cho mục đích đó (phê bình được hoan nghênh), nhưng tôi đã tự hỏi nếu không có một lệnh tiêu chuẩn cho trường hợp sử dụng chung, đơn giản và (tôi nghĩ).

Kịch bản của tôi tìm thấy tối thiểu hai số:

#!/bin/bash
# $1 limit

[ -z "$1" ] && { echo "Needs a limit as first argument." >&2; exit 1; }

read number

if [ "$number" -gt "$1" ]; then
        echo "$1"
else
        echo "$number"
fi

Câu trả lời:


20

Bạn có thể so sánh chỉ hai số với dcthích:

dc -e "[$1]sM $2d $1<Mp"

... "$1"giá trị tối đa của bạn ở đâu và "$2"là số bạn sẽ in nếu nó nhỏ hơn "$1". Điều đó cũng đòi hỏi GNU dc- nhưng bạn có thể làm điều tương tự như:

dc <<MAX
    [$1]sM $2d $1<Mp
MAX

Trong cả hai trường hợp trên, bạn có thể đặt độ chính xác thành giá trị khác 0 (mặc định) như thế nào ${desired_precision}k. Đối với cả hai điều bắt buộc là bạn xác minh rằng cả hai giá trị đều là số chắc chắndccó thể thực hiện system()cuộc gọi với !nhà điều hành.

Với tập lệnh nhỏ sau (và tiếp theo), bạn nên xác minh đầu vào cũng giống như grep -v \!|dchoặc một cái gì đó để xử lý mạnh mẽ đầu vào tùy ý. Bạn cũng nên biết rằng dcdiễn giải các số âm với _tiền tố chứ không phải -tiền tố - bởi vì cái sau là toán tử trừ.

Ngoài ra, với tập lệnh dcnày sẽ đọc thành nhiều số \newline được phân tách liên tiếp như bạn muốn cung cấp và in cho từng $maxgiá trị của bạn hoặc đầu vào, tùy thuộc vào số nào nhỏ hơn của wo:

dc -e "${max}sm
       [ z 0=? d lm<M p s0 lTx ]ST
       [ ? z 0!=T q ]S?
       [ s0 lm ]SM lTx"

Vì vậy, ... mỗi người trong số những [ngoặc vuông ]expanses là một dc chuỗi đối tượng đó là Saved từng đến mảng tương ứng của nó - bất kỳ một trong T, ?hoặc M. Bên cạnh một số điều khác dccó thể làm với một chuỗi , nó cũng có thể tính toán một chuỗix như một macro. Nếu bạn sắp xếp nó đúng, một dckịch bản nhỏ đầy đủ chức năng được lắp ráp đủ đơn giản.

dchoạt động trên một ngăn xếp . Tất cả các đối tượng đầu vào được xếp chồng lên nhau lần cuối - mỗi đối tượng đầu vào mới đẩy đối tượng trên cùng cuối cùng và tất cả các đối tượng bên dưới nó xuống trên ngăn xếp bởi một khi nó được thêm vào. Hầu hết các tham chiếu đến một đối tượng là giá trị ngăn xếp trên cùng và hầu hết các tham chiếu bật lên trên cùng của ngăn xếp (kéo tất cả các đối tượng bên dưới nó lên một) .

Bên cạnh ngăn xếp chính, còn có (ít nhất) 256 mảng và mỗi phần tử mảng đi kèm với một ngăn xếp riêng. Tôi không sử dụng nhiều ở đây. Tôi chỉ lưu trữ các chuỗi như đã đề cập để tôi có thể ltải chúng khi muốn và tính xtoán chúng một cách có điều kiện và tôi s$maxgiá trị của nó ở đầu mmảng.

Dù sao, phần nhỏ dcnày, phần lớn, những gì shell-script của bạn làm. Nó sử dụng -etùy chọn GNU-ism - như dcthường lấy các tham số của nó từ tiêu chuẩn - nhưng bạn có thể làm tương tự như sau:

echo "$script" | cat - /dev/tty | dc

... Nếu $scripttrông giống như bit trên.

Nó hoạt động như:

  • lTx- Điều này ltải và e tính xtoán macro được lưu trữ ở đầu T (để kiểm tra, tôi đoán - tôi thường chọn các tên đó một cách tùy ý) .
  • z 0=?- Test sau đó kiểm tra độ sâu ngăn xếp w / zvà, nếu ngăn xếp trống (đọc: giữ 0 đối tượng) thì nó gọi ?macro.
  • ? z0!=T q- ?Macro được đặt tên cho ? dclệnh dựng sẵn đọc một dòng đầu vào từ stdin, nhưng tôi cũng đã thêm một zbài kiểm tra độ sâu ngăn xếp khác cho nó, để nó có thể phù hợp qvới toàn bộ chương trình nếu nó kéo vào một dòng trống hoặc chạm vào EOF. Nhưng nếu nó !không và thay vào đó cư trú thành công ngăn xếp, nó sẽ gọi Tlại est.
  • d lm<M- Test sau đó sẽ dtăng đỉnh của ngăn xếp và so sánh nó với $max (như được lưu trữ trong m) . Nếu mlà giá trị nhỏ hơn, dcgọi Mmacro.
  • s0 lm- Mchỉ cần bật đỉnh của ngăn xếp và đổ nó vào vô hướng giả 0- chỉ là một cách rẻ tiền để bật ngăn xếp. Nó cũng ltải mlại một lần nữa trước khi trở về Test.
  • p- Điều này có nghĩa là nếu mnhỏ hơn đỉnh ngăn xếp hiện tại, thì hãy mthay thế nó ( ddù sao thì nó cũng được thay thế) , ở đây pkhông phải là gì và thay vào đó là bất cứ thứ gì đầu vào được pthay thế.
  • s0- Sau đó (vì pkhông bật ngăn xếp), chúng ta sẽ đổ đỉnh ngăn xếp 0lại, và sau đó ...
  • lTx- đệ quy load Test một lần nữa sau đó e xtính lại.

Vì vậy, bạn có thể chạy đoạn mã nhỏ này và nhập số tương tác tại thiết bị đầu cuối của mình và dcsẽ in lại cho bạn số bạn đã nhập hoặc giá trị $maxnếu số bạn nhập lớn hơn. Nó cũng sẽ chấp nhận bất kỳ tập tin nào (như đường ống) làm đầu vào tiêu chuẩn. Nó sẽ tiếp tục vòng lặp đọc / so sánh / in cho đến khi gặp một dòng trống hoặc EOF.

Một số lưu ý về điều này mặc dù - tôi đã viết điều này chỉ để mô phỏng hành vi trong hàm shell của bạn, vì vậy nó chỉ xử lý mạnh mẽ một số trên mỗi dòng. dctuy nhiên, có thể xử lý bao nhiêu số cách nhau trên mỗi dòng mà bạn quan tâm để ném vào nó. Tuy nhiên , do ngăn xếp của nó, số cuối cùng trên một dòng sẽ là số đầu tiên mà nó hoạt động, và do đó, như đã viết, dcsẽ in đầu ra của nó ngược lại nếu bạn in / gõ nhiều hơn một số trên mỗi dòng. để xử lý đó là lưu trữ một dòng trong một mảng, sau đó làm việc với nó.

Như thế này:

dc -e "${max}sm
    [ d lm<M la 1+ d sa :a z0!=A ]SA
    [ la d ;ap s0 1- d sa 0!=P ]SP 
    [ ? z 0=q lAx lPx l?x ]S?
    [q]Sq [ s0 lm ]SM 0sa l?x"

Nhưng ... tôi không biết liệu tôi có muốn giải thích điều đó ở độ sâu không. Chỉ cần nói rằng khi dcđọc từng giá trị trên ngăn xếp, nó sẽ lưu giá trị của nó hoặc giá trị của nó $maxtrong một mảng được lập chỉ mục, và một khi nó phát hiện ngăn xếp lại một lần nữa, nó sẽ in từng đối tượng được lập chỉ mục trước khi cố đọc một đối tượng khác dòng đầu vào.

Và vì vậy, trong khi kịch bản đầu tiên làm ...

10 15 20 25 30    ##my input line
20
20
20
15
10                ##see what I mean?

Thứ hai không:

10 15 20 25 30    ##my input line
10                ##that's better
15
20
20                ##$max is 20 for both examples
20

Bạn có thể xử lý các float với độ chính xác tùy ý nếu trước tiên bạn đặt nó bằng klệnh. Và bạn có thể thay đổi các thông số ihoặc othông số độc lập - đôi khi có thể hữu ích vì những lý do bạn có thể không mong đợi. Ví dụ:

echo 100000o 10p|dc
 00010

... Đầu tiên thiết lập dccơ số đầu ra của nó thành 100000 sau đó in 10.


3
+1 vì không biết chuyện gì vừa xảy ra sau khi đọc nó hai lần. Sẽ phải dành thời gian của tôi để đi sâu vào vấn đề này.
Minix

@Minix - meh - không cần đi sâu vào ngôn ngữ lập trình Unix lâu đời nhất nếu bạn thấy nó khó hiểu. dcMặc dù vậy, có lẽ chỉ cần đặt một vài con số trong một lúc để giữ nó trên ngón chân.
mikeerv

1
@mikeerv Quá muộn đối với tôi. Tôi hy vọng thế hệ tương lai coi tôi như một câu chuyện cảnh báo. Dấu ngoặc vuông và chữ cái ở khắp mọi nơi ...
Minix

@Minix - Ý bạn là gì? Bạn đã đi cho nó? Rất tốt - dclà một con thú hay thay đổi, nhưng nó có thể là tiện ích phổ biến nhanh nhất và có khả năng kỳ lạ nhất trên bất kỳ hệ thống Unix nào. Khi được ghép đôi với sednó có thể làm một số điều phi thường. Tôi đã chơi với nó và ddgần đây để tôi có thể thay thế sự quái dị đó readline. Đây là một mẫu nhỏ của một số thứ tôi đã làm. Làm một revtrong dcgần như là chơi của trẻ em.
mikeerv

1
@Minix - mặc dù cẩn thận với dấu ngoặc. Không có cách nào để đặt dấu ngoặc vuông trong chuỗi - cách tốt nhất bạn có thể làm là [string]P91P93P[string]P. Vì vậy, tôi có một chút trong số các sedbạn có thể thấy hữu ích: sed 's/[][]/]P93]&[1P[/g;s/[]3][]][[][1[]//g'nó luôn luôn thay thế các ô vuông chính xác bằng một dấu ngoặc đóng chuỗi, sau đó a P, sau đó là giá trị ascii thập phân của hình vuông và một giá trị khác P; sau đó một dấu [ngoặc vuông mở để tiếp tục chuỗi. Nếu bạn gặp rắc rối với dckhả năng chuyển đổi chuỗi / số của w / , nhưng - đặc biệt là khi kết hợp với odnó - nó có thể khá thú vị.
mikeerv

88

Nếu bạn biết bạn đang xử lý hai số nguyên ab, thì các mở rộng số học vỏ đơn giản này bằng cách sử dụng toán tử ternary là đủ để đưa ra số cực đại:

$(( a > b ? a : b ))

và số tối thiểu:

$(( a < b ? a : b ))

Ví dụ

$ a=10
$ b=20
$ max=$(( a > b ? a : b ))
$ min=$(( a < b ? a : b ))
$ echo $max
20
$ echo $min
10
$ a=30
$ max=$(( a > b ? a : b ))
$ min=$(( a < b ? a : b ))
$ echo $max
30
$ echo $min
20
$ 

Đây là một kịch bản shell thể hiện điều này:

#!/usr/bin/env bash
[ -z "$1" ] && { echo "Needs a limit as first argument." >&2; exit 1; }
read number
echo Min: $(( $number  < $1 ? $number : $1 ))
echo Max: $(( $number  > $1 ? $number : $1 ))

Câu trả lời tốt đẹp. Xin vui lòng, một mod nhỏ: điều này có thể được sử dụng quá cho "> =" không?
Sopalajo de Arrierez

@SopalajodeArrierez Tôi không hoàn toàn chắc chắn về ý của bạn. Bạn cũng có thể làm max=$(( a >= b ? a : b )), nhưng kết quả hoàn toàn giống nhau - nếu a và b bằng nhau, thì điều đó thực sự không quan trọng. Có phải đó là những gì bạn đang hỏi?
Chấn thương kỹ thuật số

Thật vậy, cảm ơn bạn, chấn thương DIgital. Tôi chỉ tự hỏi nếu toán tử boolean "> =" có thể ở đây.
Sopalajo de Arrierez

@SopalajodeArrierez if (( a >= b )); then echo a is greater than or equal to b; fi- đó có phải là những gì bạn đang yêu cầu? (lưu ý việc sử dụng (( ))ở đây thay vì $(( )))
Chấn thương kỹ thuật số

À, ừ, được rồi. Giờ thì tôi đã hiểu. Tôi không biết nhiều về việc mở rộng vỏ, vì vậy tôi thường bị lẫn lộn giữa các điều kiện. Cảm ơn bạn một lần nữa.
Sopalajo de Arrierez

25

sortheadcó thể làm điều này:

numbers=(1 4 3 5 7 1 10 21 8)
printf "%d\n" "${numbers[@]}" | sort -rn | head -1       # => 21

2
Lưu ý rằng đây là O(n log(n))một triển khai hiệu quả của max O(n). n=2Tuy nhiên, điều quan trọng nhỏ của chúng tôi là vì sự sinh sản của hai quá trình có chi phí lớn hơn nhiều.
Lie Ryan

1
Mặc dù đúng, @ glenn-jackman, tôi không chắc vấn đề được đưa ra cho câu hỏi. Không có yêu cầu cho cách hiệu quả nhất để làm điều đó. Tôi nghĩ rằng câu hỏi là về sự thuận tiện.
David Hoelzer

1
@DavidHoelzer - đây không phải là cách hiệu quả nhất để làm điều này ngay cả trong số các câu trả lời được cung cấp ở đây. Nếu làm việc với các bộ số thì có ít nhất một câu trả lời khác ở đây hiệu quả hơn câu này (theo thứ tự độ lớn) và nếu chỉ làm việc với hai số nguyên thì có một câu trả lời khác ở đây hiệu quả hơn (theo thứ tự độ lớn) . Nó là thuận tiện mặc dù (nhưng tôi có thể sẽ bỏ qua mảng shell, cá nhân) .
mikeerv

1
Điều này có thể được thực hiện mà không có mảng như sau:numbers="1 4 3 5 7 1 10 21 8"; echo $numbers | tr ' ' "\n" | sort -rn | head -n 1
ngreen

1
Một cách tiếp cận hiệu quả hơn có lẽ là đây:max=0; for x in $numbers ; do test $x -gt $max && max=$x ; done
ngreen

6

Bạn có thể định nghĩa một thư viện các hàm toán học được xác định trước bcvà sau đó sử dụng chúng trong dòng lệnh.

Ví dụ: bao gồm các mục sau trong tệp văn bản, chẳng hạn như ~/MyExtensions.bc:

define max(a,b){
  if(a>b)
  { 
   return(a)
  }else{
   return(b)
  }
}

Bây giờ bạn có thể gọi bcbằng cách:

> echo 'max(60,54)' | bc ~/MyExtensions.bc
60

FYI, có các chức năng thư viện toán học miễn phí như cái này có sẵn trực tuyến.

Sử dụng tệp đó, bạn có thể dễ dàng tính toán các hàm phức tạp hơn như GCD:

> echo 'gcd (60,54)' | bc ~/extensions.bc -l
6

Nếu tôi không nhầm, các chức năng như vậy cũng có thể được biên dịch với tệp thực thi nếu cần thiết. Tôi nghĩ rằng hầu hết các bcs chỉ là dcfrontend cho đến ngày nay, tuy nhiên, ngay cả khi GNUbc không còn như vậy (nhưng GNU dcvà GNU bcchia sẻ một số lượng khổng lồ ở codebase của họ) . Dù sao, đây có thể là câu trả lời tốt nhất ở đây.
mikeerv

Để thuận tiện gọi lệnh này trong tệp của tập lệnh shell, bạn cũng có thể chuyển định nghĩa hàm thành hàm bc, ngay trước lệnh gọi hàm. Không có tập tin thứ hai sau đó :)
tanius

5

Quá dài cho một nhận xét:

Trong khi bạn có thể làm những việc này ví dụ như với sort | headhoặc sort | tailcombo, có vẻ như khá tối ưu cả thốn và lỗi xử lý khôn ngoan. Theo như thực thi, combo có nghĩa là sinh ra 2 tiến trình chỉ để kiểm tra hai dòng. Đó dường như là một chút quá mức.

Vấn đề nghiêm trọng hơn là, trong hầu hết các trường hợp bạn cần biết, rằng đầu vào là lành mạnh, chỉ chứa các số. Giải pháp của @ glennjackmann giải quyết một cách khéo léo điều này, vì printf %dnên cấm những người không có số nguyên. Nó cũng không hoạt động với float (trừ khi bạn thay đổi định dạng định dạng thành %f, nơi bạn sẽ gặp phải các vấn đề làm tròn).

test $1 -gt $2 sẽ cho bạn biết liệu so sánh có thất bại hay không (trạng thái thoát 2 có nghĩa là có lỗi trong quá trình thử nghiệm. Vì đây thường là một vỏ được tích hợp sẵn, không có quá trình bổ sung nào được sinh ra - chúng ta đang nói về hàng trăm thực hiện nhanh hơn lần. Chỉ hoạt động với số nguyên.

Nếu bạn tình cờ cần so sánh một vài số dấu phẩy động, tùy chọn thú vị có thể là bc:

define x(a, b) {
    if (a > b) {
       return (a);
    }
    return (b);
 }

sẽ tương đương test $1 -gt $2và sử dụng trong shell:

max () { printf '
    define x(a, b) {
        if (a > b) {
           return (a);
        }
        return (b);
     }
     x(%s, %s)
    ' $1 $2 | bc -l
}

vẫn nhanh hơn gần 2,5 lần so với printf | sort | head(cho hai số).

Nếu bạn có thể dựa vào các phần mở rộng GNU bc, thì bạn cũng có thể sử dụng read()hàm để đọc các số trực tiếp vào bcsript.


Chính xác là suy nghĩ của tôi - Tôi chỉ ủi cái này ra, nhưng bạn đã đánh bại tôi: dc -e "${max}sm[z0=?dlm<Mps0lTx]ST[?z0!=Tq]S?[s0lm]SMlTx"- ồ, ngoại trừ đó dclà toàn bộ (trừ tiếng vang, mặc dù có thể) - nó đọc stdin và in $maxhoặc số đầu vào tùy theo nhỏ hơn. Dù sao, tôi không thực sự quan tâm để giải thích nó và câu trả lời của bạn tốt hơn tôi sẽ viết. Vì vậy, có upvote của tôi, xin vui lòng.
mikeserv

@mikeerv thực sự có một dckịch bản được giải thích sẽ thực sự tốt, RPN không được thấy thường xuyên trong những ngày này.
peterph 24/2/2015

Ký hiệu ngược Ba Lan (còn gọi là ký hiệu Postfix). Ngoài ra, nếu dccó thể tự thực hiện I / O, nó thậm chí còn thanh lịch hơn.
peterph 24/2/2015

4

Để có được giá trị lớn hơn của $ a và $ b, hãy sử dụng:

[ "$a" -gt "$b" ] && $a || $b

Nhưng bạn cần một cái gì đó xung quanh, có lẽ bạn không có nghĩa là thực thi số, vì vậy để hiển thị giá trị lớn hơn của hai sử dụng "echo"

[ "$a" -gt "$b" ] && echo $a || echo $b

Ở trên phù hợp độc đáo với một chức năng shell, ví dụ

max() {
   [ "$1" -gt "$2" ] && echo $1 || echo $2
}

Để gán giá trị lớn hơn của hai biến, hãy sử dụng phiên bản sửa đổi này:

[ "$a" -gt "$b" ] && biggest=$a || biggest=$b

hoặc sử dụng chức năng được xác định:

biggest=$( max $a $b )

Các biến thể chức năng cũng cung cấp cho bạn cơ hội để thêm kiểm tra lỗi đầu vào gọn gàng.

Để trả về tối đa hai số thập phân / dấu phẩy động, bạn có thể sử dụng awk

decimalmax() { 
   echo $1 $2 | awk '{if ($1 > $2) {print $1} else {print $2}}'; 
}

EDIT: Sử dụng kỹ thuật này, bạn có thể tạo chức năng "giới hạn" hoạt động theo cách khác theo chỉnh sửa / ghi chú của bạn. Hàm này sẽ trả về mức thấp hơn của hai, ví dụ:

limit() {
   [ "$1" -gt "$2" ] && echo $2 || echo $1
}

Tôi muốn đặt các chức năng tiện ích vào một tệp riêng biệt, gọi nó myprogram.funcsvà sử dụng nó trong một tập lệnh như sau:

#!/bin/bash

# Initialization. Read in the utility functions
. ./myprogram.funcs

# Do stuff here
#
[ -z "$1" ] && { echo "Needs a limit as first argument." >&2; exit 1; }

read number
echo $( limit $1 $number )

FWIW điều này vẫn làm những gì bạn đã làm, và phiên bản của bạn mặc dù dài dòng hơn, nhưng cũng hiệu quả.

Các hình thức nhỏ gọn hơn không thực sự tốt hơn, nhưng ngăn ngừa sự lộn xộn trong các tập lệnh của bạn. Nếu bạn có nhiều cấu trúc if-then-other-fi đơn giản, kịch bản sẽ mở rộng nhanh chóng.

Nếu bạn muốn sử dụng lại kiểm tra các số lớn hơn / nhỏ hơn nhiều lần trong một tập lệnh, hãy đặt nó vào một hàm. Định dạng hàm giúp dễ dàng gỡ lỗi và sử dụng lại và cho phép bạn dễ dàng thay thế phần đó của tập lệnh, ví dụ bằng lệnh awk để có thể xử lý các số thập phân không nguyên.

Nếu nó là một trường hợp sử dụng duy nhất, chỉ cần mã nó trong dòng.


4

Bạn có thể định nghĩa một hàm là

maxnum(){
    if [ $2 -gt $1 ]
    then
        echo $2
    else
        echo $1
    fi
}

Gọi nó là maxnum 54 42và nó vang 54. Bạn có thể thêm thông tin xác thực bên trong hàm (chẳng hạn như hai đối số hoặc số làm đối số) nếu bạn muốn.


Hầu hết các vỏ không làm mỹ phẩm điểm nổi. Nhưng nó làm việc cho số nguyên.
orion

1
Chức năng này không cần thiết phải tương thích POSIX. Thay đổi function maxnum {để maxnum() {và nó sẽ làm việc cho nhiều vỏ.
Charles Duffy

2

Từ một tập lệnh shell, có một cách để sử dụng bất kỳ phương thức tĩnh công khai Java nào (và ví dụ Math.min () ). Từ bash trên Linux:

. jsbInit
jsbStart 
A=2 
B=3 
C=$(jsb Math.min "$A" "$B")
echo "$C"

Điều này yêu cầu Java Shell Bridge https://sourceforge.net/projects/jsbridge/

Rất nhanh chóng, bởi vì các cuộc gọi phương pháp được nội cấp nước tập trung ; không yêu cầu quá trình


0

Hầu hết mọi người sẽ chỉ làm sort -n input | head -n1(hoặc đuôi), nó đủ tốt cho hầu hết các tình huống kịch bản. Tuy nhiên, điều này hơi vụng về nếu bạn có các số trong một dòng thay vì một cột - bạn phải in nó ra trong một định dạng thích hợp ( tr ' ' '\n'hoặc một cái gì đó tương tự).

Shell không thực sự lý tưởng để xử lý số, nhưng bạn có thể dễ dàng chuyển sang một số chương trình khác tốt hơn trong đó. Tùy thuộc vào sở thích của riêng bạn, bạn gọi tối đa dc(hơi khó hiểu, nhưng nếu bạn biết bạn đang làm gì, thì tốt thôi - xem câu trả lời của mikeerv), hoặc awk 'NR==1{max=$1} {if($1>max){max=$1}} END { print max }'. Hoặc có thể perlhoặc pythonnếu bạn thích. Một giải pháp (nếu bạn sẵn sàng cài đặt và sử dụng phần mềm ít được biết đến) sẽ là ised(đặc biệt nếu dữ liệu của bạn nằm trong một dòng duy nhất: bạn chỉ cần làm ised --l input.dat 'max$1').


Bởi vì bạn đang yêu cầu hai số, đây là tất cả quá mức cần thiết. Điều này là đủ:

python -c "print(max($j,$k))"

1
Có thể tốt hơn nếu bạn sử dụng sys.argv:python2 -c 'import sys; print (max(sys.argv))' "$@"
muru

1
Các đối số sort + headlà quá mức cần thiết nhưng pythonkhông tính toán.
mikeerv

Tất cả các phương thức trên dòng được thiết kế để xử lý các bộ số khổng lồ và đề xuất rõ ràng loại sử dụng này (đọc từ một đường ống hoặc một tệp). tối thiểu / tối đa cho 2 đối số là câu hỏi có cảm giác khác - nó gọi hàm thay vì luồng. Tôi chỉ có nghĩa là cách tiếp cận luồng là quá mức cần thiết - công cụ bạn sử dụng là tùy ý, tôi chỉ sử dụng pythonvì nó gọn gàng.
orion

Tôi sẽ gọi giải pháp gọn gàng gợi ý này , nhưng điều đó có thể là bởi vì tôi là một pythonbigot (hoặc vì nó không đòi hỏi một ngã ba và một thông dịch viên khổng lồ bổ sung) . Hoặc có thể cả hai.
mikeerv

@mikeerv Tôi cũng sẽ sử dụng nó nếu tôi biết chúng là số nguyên. Tất cả những giải pháp tôi đã đề cập đều theo giả định rằng các con số có thể là số float - bash không tạo ra dấu phẩy động và trừ khi zsh là vỏ tự nhiên của bạn, bạn sẽ cần một cái nĩa (và có thể là một con dao).
orion
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.