বাশের দুটি ভাসমান পয়েন্ট সংখ্যা কীভাবে তুলনা করবেন?


156

আমি ব্যাশ স্ক্রিপ্টের মধ্যে দুটি ভাসমান পয়েন্ট সংখ্যা তুলনা করার চেষ্টা করছি। আমি ভেরিয়েবল আছে, যেমন

let num1=3.17648e-22
let num2=1.5

এখন, আমি এই দুটি সংখ্যার একটি সহজ তুলনা করতে চাই:

st=`echo "$num1 < $num2" | bc`
if [ $st -eq 1]; then
  echo -e "$num1 < $num2"
else
  echo -e "$num1 >= $num2"
fi

দুর্ভাগ্যক্রমে, আমার সাথে নাম্বারের সঠিক চিকিত্সা নিয়ে কিছু সমস্যা আছে যা "ই-ফর্ম্যাট" হতে পারে। :(

কোন সাহায্য, ইঙ্গিত স্বাগত!


2
"ই-ফর্ম্যাট" দিয়ে আমি সূচকীয় স্বরলিপি (যাকে বৈজ্ঞানিক স্বরলিপিও বলা হয়)
জোনাস

উত্তর:


181

আরও সুবিধাজনকভাবে

এটি আরও সহজেই বাশের সংখ্যার প্রসঙ্গটি ব্যবহার করে করা যেতে পারে:

if (( $(echo "$num1 > $num2" |bc -l) )); then
  
fi

ব্যাখ্যা

বেসিক ক্যালকুলেটর কমান্ডের মাধ্যমে পাইপিং করা হচ্ছে bc হয় 1 বা 0 হয় returns

বিকল্পটি -lসমান--mathlib ; এটি স্ট্যান্ডার্ড গণিত লাইব্রেরি লোড করে।

ডাবল প্রথম বন্ধনীর মধ্যে সম্পূর্ণ এক্সপ্রেশনটি বদ্ধ করা (( ))এই মানগুলি যথাক্রমে সত্য বা মিথ্যাতে অনুবাদ করবে।

দয়া করে নিশ্চিত করুন যে bcবেসিক ক্যালকুলেটর প্যাকেজ ইনস্টল করা আছে।

এটি সমানভাবে বৈজ্ঞানিক বিন্যাসে ভাসমানদের জন্য কাজ করে, মূলধন অক্ষর Eনিযুক্ত করা হয় যেমন, যেমনnum1=3.44E6


1
স্ট্যাকওভারফ্লো / প্রশ্নগুলি /8654051/… হিসাবে একই সমস্যা যেমন eg প্রতিধ্বনি "1.1 + 2e + 02" | বিসি (স্ট্যান্ডার্ড_ইন) 1: বাক্য গঠন ত্রুটি
নিমো

1
@ মোহিতআরোরা দয়া করে নিশ্চিত হন যে আপনার কাছে bcক্যালকুলেটর প্যাকেজ ইনস্টল রয়েছে।
সার্জ স্ট্রোব্যান্ড

1
আমি 0: not foundবিবৃতি দিয়ে একটি পেতে if (( $(echo "$TOP_PROCESS_PERCENTAGE > $THRESHOLD" | bc -l) )); then
স্টিফেন

1
সমস্ত যারা পেতে "কমান্ড not found" করার জন্য, আপনাকে ঘিরা প্রয়োজন মনে রাখবেন bcপারেন ব্যাকটিক বা মধ্যে $()মধ্যে তারপর (( ))... অর্থাত (( $(bc -l<<<"$a>$b") ))এবং (( bc -l<<<"$a>$b" ))
নরমালাইজ করুন

@ নেমো একটি বড় বড় অক্ষর সহ বৈজ্ঞানিক স্বরলিপিতে সংখ্যা লিখুন E, এবং সমস্ত বাক্য গঠন ত্রুটি চলে যাবে।
সার্জ স্ট্রোব্যা্যান্ড্ট

100

বাশ কেবলমাত্র পূর্ণসংখ্যার গণিতগুলি পরিচালনা করে তবে আপনি bcকমান্ডটি নিম্নরূপ ব্যবহার করতে পারেন :

$ num1=3.17648E-22
$ num2=1.5
$ echo $num1'>'$num2 | bc -l
0
$ echo $num2'>'$num1 | bc -l
1

দ্রষ্টব্য লক্ষণটি অবশ্যই বড় হাতের হতে হবে


3
হ্যাঁ, তবে ভুল গণনার পক্ষে বৈজ্ঞানিক সংখ্যার স্বরলিপিতে 'ই' সাইন ইন করা এবং পূর্বনির্ধারিত গণিতের রুটিনের জন্য বিসি প্রোগ্রামে -l পতাকা ব্যবহার করতে হবে
অররাসদি

2
আপনার উত্তরটি তখন উল্লেখ করা উচিত, কেবল একটি খুব অনুরূপ সমাধান পোস্ট করার পরিবর্তে এবং গুরুত্বপূর্ণ পার্থক্য উল্লেখ না করে।
ড্যানিয়েল পারসন

4
এটি একটি না খুব অনুরূপ সমাধান নয়। আলরাসির সমাধানটি সরঞ্জামটি ব্যবহার করে bcএবং এটিই আমি কোনও বেস প্রোগ্রামারকে সুপারিশ করব। বেস প্রকারভেদ ভাষা। হ্যাঁ, এটি পূর্ণসংখ্যার পাটিগণিত করতে পারে তবে ভাসমান পয়েন্টের জন্য আপনাকে অবশ্যই কিছু বাহ্যিক সরঞ্জাম ব্যবহার করতে হবে। বিসি সেরা, কারণ এটিই এটির জন্য তৈরি।
দেজনলিক

8
যেহেতু তিনি এটি একটি বিবৃতিতে এটি ব্যবহার করার চেষ্টা করছেন, আমি এটি প্রদর্শন করব। যদি [$ (... | বিসি-এল) == 1]; তাহলে ...
রবার্ট জ্যাকবস

27

awkঅ পূর্ণসংখ্যার গণিতে ব্যবহার করা ভাল । আপনি এই ব্যাশ ইউটিলিটি ফাংশনটি ব্যবহার করতে পারেন:

numCompare() {
   awk -v n1="$1" -v n2="$2" 'BEGIN {printf "%s " (n1<n2?"<":">=") " %s\n", n1, n2}'
}

এবং এটি হিসাবে কল করুন:

numCompare 5.65 3.14e-22
5.65 >= 3.14e-22

numCompare 5.65e-23 3.14e-22
5.65e-23 < 3.14e-22

numCompare 3.145678 3.145679
3.145678 < 3.145679

2
আমি এই উত্তরটি পছন্দ করি, লোকেরা এএসকে এসএসপি শুরুর দিকে লজ্জা পায়, তারা মনে হয় এটি আসলে এটির চেয়ে কঠিন বলে মনে হয়, আমি মনে করি লোকগুলি কোঁকড়ানো ধনুর্বন্ধনী এবং আপাতদৃষ্টিতে ভাষার মিশ্র বাক্য গঠন দ্বারা (এক নজরে) ভয় দেখায়। এবং যেহেতু অ্যাডাব্লিকটি খুব ভাল টার্গেট সিস্টেমে উপস্থিত থাকার গ্যারান্টিযুক্ত, ঠিক তেমনি বিসির মতো (কোনটি নিশ্চিত না, কোনটি যদি কখনও ইনস্টলড থাকে না)। আমি বাশ স্ক্রিপ্টিং পছন্দ করি তবে এটি কোনও ভাসমান বিন্দু নয়, এমনকি দুর্বল দশমিক জায়গাও নয় (আমার ধারণা, কেউ কেউ এর জন্য 'নকল' মোড়ক লিখতে পারে) সত্যিই বিরক্তিকর ...
ওসিরিগোগোথ্রা

2
শেল স্ক্রিপ্ট ব্যবহার awkএবং bcপ্রাচীন কাল থেকেই একটি স্ট্যান্ডার্ড অনুশীলন, আমি বলব কিছু বৈশিষ্ট্য কখনই শেলগুলিতে যুক্ত করা যায়নি কারণ এগুলি অ্যাড, বিসি এবং অন্যান্য ইউনিক্স সরঞ্জামগুলিতে উপলব্ধ। শেল স্ক্রিপ্টগুলিতে বিশুদ্ধতার দরকার নেই।
পাইকুক

1
@ ওয়ান্ডারিংমাইন্ড করার একটি উপায় হ'ল 0 বা 1 পাস করা exitযাতে আওক ফলাফলটি শেলটিতে ফিরে একটি সঠিক, মেশিন-পঠনযোগ্য উপায়ে পৌঁছে দেয়। if awk -v n1="123.456" -v n2="3.14159e17" 'BEGIN { exit (n1 <= n2) }' /dev/null; then echo bigger; else echo not; fi... তবে কীভাবে শর্তটি উল্টে গেছে তা দ্রষ্টব্য (প্রস্থান স্থিতি 0 এর অর্থ শেলের সাফল্য)।
ট্রিপলি

1
কেন শুধু python। আপনি perlঅনেক লিনাক্স / ইউনিক্স সিস্টেমে ডিফল্টরূপে ইনস্টল .. এমনকি phpএছাড়াও
anubhava

1
এই awkসমাধানটি আমার ক্ষেত্রে এটির চেয়ে বেশি শক্তিশালী যেটির সাথে আমি bcযে কারণে পাইনি তার জন্য ভুল ফলাফল দেয়।
এমবিআর

22

তাত্ক্ষণিক স্বরলিপি ছাড়াই ভাসমানের তুলনা করার জন্য বিশুদ্ধ বাশ সমাধান, শীর্ষস্থানীয় বা অনুসরণীয় শূন্যগুলি:

if [ ${FOO%.*} -eq ${BAR%.*} ] && [ ${FOO#*.} \> ${BAR#*.} ] || [ ${FOO%.*} -gt ${BAR%.*} ]; then
  echo "${FOO} > ${BAR}";
else
  echo "${FOO} <= ${BAR}";
fi

লজিকাল অপারেটরদের বিষয়গুলির অর্ডার । পূর্ণসংখ্যার অংশগুলি সংখ্যার সাথে তুলনা করা হয় এবং ভগ্নাংশের অংশগুলি ইচ্ছাকৃতভাবে স্ট্রিংগুলির সাথে তুলনা করা হয়। চলকগুলি এই পদ্ধতিটি ব্যবহার করে পূর্ণসংখ্যার এবং ভগ্নাংশের মধ্যে বিভক্ত হয়

পূর্ণসংখ্যার (বিন্দু ছাড়াই) সাথে ভাসমান তুলনা করবেন না


15

শর্ত থাকলে আপনি বাশ এর সাথে একত্রিত করে awk ব্যবহার করতে পারেন, awk 1 বা 0 মুদ্রণ করবে এবং সেগুলি যদি সত্য বা মিথ্যা দিয়ে দফা দ্বারা ব্যাখ্যা করা হবে ।

if awk 'BEGIN {print ('$d1' >= '$d2')}'; then
    echo "yes"
else 
    echo "no"
fi

ব্যবহার যেহেতু এটি ফ্লোটিং পয়েন্ট সংখ্যার হ্যান্ডেল করতে সক্ষম হয় awk মহান, কিন্তু আমি ব্যক্তিগতভাবে synthax পছন্দ করাif (( $(echo $d1 $d2 | awk '{if ($1 > $2) print 1;}') )); then echo "yes"; else echo "no"; fi
ডেভিড গেয়র্গ Reichelt

7

প্যাকেজ সংস্করণ সংখ্যার তুলনা করার সময় সতর্কতা অবলম্বন করুন, যেমন গ্রেপ ২.২০ সংস্করণ ২.6 এর চেয়ে বড় কিনা তা পরীক্ষা করা:

$ awk 'BEGIN { print (2.20 >= 2.6) ? "YES" : "NO" }'
NO

$ awk 'BEGIN { print (2.2 >= 2.6) ? "YES" : "NO" }'
NO

$ awk 'BEGIN { print (2.60 == 2.6) ? "YES" : "NO" }'
YES

আমি এই জাতীয় শেল / অ্যাজক ফাংশন দিয়ে এ জাতীয় সমস্যাটি সমাধান করেছি:

# get version of GNU tool
toolversion() {
    local prog="$1" operator="$2" value="$3" version

    version=$($prog --version | awk '{print $NF; exit}')

    awk -vv1="$version" -vv2="$value" 'BEGIN {
        split(v1, a, /\./); split(v2, b, /\./);
        if (a[1] == b[1]) {
            exit (a[2] '$operator' b[2]) ? 0 : 1
        }
        else {
            exit (a[1] '$operator' b[1]) ? 0 : 1
        }
    }'
}

if toolversion grep '>=' 2.6; then
   # do something awesome
fi

একটি ডেবিয়ান-ভিত্তিক সিস্টেমে, dpkg --compare-versionsপ্রায়শই দরকারী। এটিতে নির্মিত ডেবিয়ান প্যাকেজ সংস্করণগুলির তুলনা করার জন্য এটি সম্পূর্ণ যুক্তিযুক্ত, যা কেবলমাত্র আরও জটিল x.y
নিল মেহেহে

5

অবশ্যই, যদি আপনার সত্যিকারের ফ্লোটিং-পয়েন্ট পাটিগণিতের প্রয়োজন না হয়, যেমন ডলারের মানগুলিতে যেখানে সবসময় ঠিক দুটি দশমিক অঙ্ক থাকে তবে আপনি অঙ্কটি ফেলে দিতে পারেন (কার্যকরভাবে 100 দ্বারা গুণিত) এবং ফলাফলগুলি পূর্ণসংখ্যার সাথে তুলনা করতে পারেন।

if [[ $((10#${num1/.})) < $((10#${num2/.})) ]]; then
    ...

এটি স্পষ্টতই আপনাকে নিশ্চিত হওয়া দরকার যে উভয় মানের দশমিক জায়গার সমান সংখ্যা রয়েছে।


3

আমি উত্তরগুলি এখান থেকে ব্যবহার করেছি এবং সেগুলিকে একটি ফাংশনে রেখেছি, আপনি এটি ব্যবহার করতে পারেন:

is_first_floating_number_bigger 1.5 1.2
result="${__FUNCTION_RETURN}"

একবার বলা হয়, echo $resultহতে হবে 1এই ক্ষেত্রে অন্যথায়, 0

কাজ:

is_first_floating_number_bigger () {
    number1="$1"
    number2="$2"

    [ ${number1%.*} -eq ${number2%.*} ] && [ ${number1#*.} \> ${number2#*.} ] || [ ${number1%.*} -gt ${number2%.*} ];
    result=$?
    if [ "$result" -eq 0 ]; then result=1; else result=0; fi

    __FUNCTION_RETURN="${result}"
}

অথবা ডিবাগ আউটপুট সহ একটি সংস্করণ:

is_first_floating_number_bigger () {
    number1="$1"
    number2="$2"

    echo "... is_first_floating_number_bigger: comparing ${number1} with ${number2} (to check if the first one is bigger)"

    [ ${number1%.*} -eq ${number2%.*} ] && [ ${number1#*.} \> ${number2#*.} ] || [ ${number1%.*} -gt ${number2%.*} ];
    result=$?
    if [ "$result" -eq 0 ]; then result=1; else result=0; fi

    echo "... is_first_floating_number_bigger: result is: ${result}"

    if [ "$result" -eq 0 ]; then
        echo "... is_first_floating_number_bigger: ${number1} is not bigger than ${number2}"
    else
        echo "... is_first_floating_number_bigger: ${number1} is bigger than ${number2}"
    fi

    __FUNCTION_RETURN="${result}"
}

কেবল একটি পৃথক .shফাইলে ফাংশনটি সংরক্ষণ করুন এবং এটি এর মতো অন্তর্ভুক্ত করুন:

. /path/to/the/new-file.sh

3

আমি https://stackoverflow.com/a/56415379/1745001 এর উত্তর হিসাবে এটি পোস্ট করছিলাম যখন এটি এই প্রশ্নের ডুপ হিসাবে বন্ধ হয়ে গেছে তাই এখানে এটি এখানে যেমন প্রযোজ্য তেমনটি এখানে:

সরলতা এবং স্বচ্ছতার জন্য গণনাগুলির জন্য কেবল বিশ্রী ব্যবহার করুন কারণ এটি একটি স্ট্যান্ডার্ড ইউনিক্স সরঞ্জাম এবং ঠিক তেমনই বিসি হিসাবে উপস্থিত হওয়ার সম্ভাবনা রয়েছে এবং সিনট্যাকটিকভাবে কাজ করা আরও সহজ।

এই প্রশ্নের জন্য:

$ cat tst.sh
#!/bin/bash

num1=3.17648e-22
num2=1.5

awk -v num1="$num1" -v num2="$num2" '
BEGIN {
    print "num1", (num1 < num2 ? "<" : ">="), "num2"
}
'

$ ./tst.sh
num1 < num2

এবং সেই অন্য প্রশ্নের জন্য যা এইটির ডুপ হিসাবে বন্ধ ছিল:

$ cat tst.sh
#!/bin/bash

read -p "Operator: " operator
read -p "First number: " ch1
read -p "Second number: " ch2

awk -v ch1="$ch1" -v ch2="$ch2" -v op="$operator" '
BEGIN {
    if ( ( op == "/" ) && ( ch2 == 0 ) ) {
        print "Nope..."
    }
    else {
        print ch1 '"$operator"' ch2
    }
}
'

$ ./tst.sh
Operator: /
First number: 4.5
Second number: 2
2.25

$ ./tst.sh
Operator: /
First number: 4.5
Second number: 0
Nope...

@ ডুডবাই না, এটি পরিষ্কার, সরল, পোর্টেবল অ্যাডক কোড বা অ-সুস্পষ্ট, অস্পষ্ট, শেল-নির্ভর শেল + বিসি কোড।
এড মর্টন

2

এই স্ক্রিপ্টটি সাহায্য করতে পারে যেখানে আমি ইনস্টল করা grailsসংস্করণটি সর্বনিম্ন প্রয়োজনীয়তার চেয়ে বড় if আশা করি এটা সাহায্য করবে.

#!/bin/bash                                                                                         

min=1.4                                                                                             
current=`echo $(grails --version | head -n 2 | awk '{print $NF}' | cut -c 1-3)`                         

if [ 1 -eq `echo "${current} < ${min}" | bc` ]                                                          
then                                                                                                
    echo "yo, you have older version of grails."                                                   
else                                                                                                                                                                                                                       
    echo "Hurray, you have the latest version" 
fi

2
num1=0.555
num2=2.555


if [ `echo "$num1>$num2"|bc` -eq 1 ]; then
       echo "$num1 is greater then $num2"
else
       echo "$num2 is greater then $num1"
fi

2

দয়া করে নীচের সম্পাদিত কোডটি পরীক্ষা করুন: -

#!/bin/bash

export num1=(3.17648*e-22)
export num2=1.5

st=$((`echo "$num1 < $num2"| bc`))
if [ $st -eq 1 ]
  then
    echo -e "$num1 < $num2"
  else
    echo -e "$num1 >= $num2"
fi

এটি ভাল কাজ করে।


2

awk এবং এর মতো সরঞ্জামগুলি (আমি আপনাকে দেখছি sed ...) পুরানো প্রকল্পগুলির ডাস্টবিনে ছেড়ে দেওয়া উচিত, এমন কোড সহ যে এটি পড়ার জন্য কখনই পড়েনি ভাষায় লেখা হয়েছে বলে সবাই স্পর্শ করতে ভীত।

অথবা আপনি অপেক্ষাকৃত বিরল প্রকল্প যা কোড রক্ষণাবেক্ষণ অপ্টিমাইজেশানের উপর সিপিইউ ব্যবহারের অনুকূলিতকরণকে অগ্রাধিকার দেওয়ার প্রয়োজন ... সেক্ষেত্রে চালিয়ে যান।

যদি তা না হয় তবে তার পরিবর্তে কেবল পাঠযোগ্য এবং স্পষ্ট কিছু ব্যবহার করবেন না কেন python? আপনার সহকর্মী কোডার এবং ভবিষ্যতের স্ব আপনাকে ধন্যবাদ জানাবে। আপনি pythonঅন্যান্য সকলের মতো ব্যাশের সাথেও ইনলাইন ব্যবহার করতে পারেন ।

num1=3.17648E-22
num2=1.5
if python -c "exit(0 if $num1 < $num2 else 1)"; then
    echo "yes, $num1 < $num2"
else
    echo "no, $num1 >= $num2"
fi

@ উইটিকো আমার মূল সংস্করণটি কিছুটা স্নিকারক ছিল।
সিভিফ্যান

আরও বেশি সংযুক্তি: এর not(...)পরিবর্তে ব্যবহার করুন0 if ... else 1
নিল মেহেজু

1
আপনি যদি ইতিহাসের ডাস্টবিনে বিশ্রী এবং সেড (আমি আপনাকে সিভিফ্যানের দিকে তাকিয়ে আছি) প্রকাশ করছি তবে আপনি একজন লস সিস্টেম সিস্টেম অ্যাডমিনিস্ট্রেটর এবং আপনি খুব বেশি কোড টাইপ করছেন। (এবং আমি পাইথন পছন্দ করি এবং ব্যবহার করি, সুতরাং এটি এটি সম্পর্কে নয়)। -1 ভুল জায়গায় রাখা snarkiness জন্য। সেই সরঞ্জামগুলির জন্য সিস্টেমে ডোমেনে একটি জায়গা রয়েছে, পাইথন বা না।
মাইক এস

1
মজার বিষয় হল, আমি ভাল ওল 'পার্ল দিয়ে শেষ করেছি! awk '${print $5}' ptpd_log_file | perl -ne '$_ > 0.000100 && print' > /tmp/outfile। সহজ কিছু. প্রতিটি ভাষার নিজস্ব জায়গা আছে।
মাইক এস

1
সিডস সিনট্যাকিক ওয়াকনেস দিয়ে বিশ্রীভাবে গাদাগাদি করবেন না। পাইথন মতো awk যে ইউনিক্স ইনস্টলেশন ও এর awk সমতুল্য উপর একটি আবশ্যিক ইউটিলিটি python -c "import sys; sys.exit(0 if float($num1) < float($num2) else 1)"সহজভাবে হয় awk "BEGIN{exit ($num1 > $num2 ? 0 : 1)}"
এড মর্টন

2

বড় এবং ছোট হাতের অক্ষর (যেমন, 12.00e4) উভয়ের সাথে বৈজ্ঞানিক স্বরলিপি সহ সমস্ত সম্ভাব্য স্বরলিপিগুলিকে সমর্থন করে এমন একটি সমাধান :

if (( $(bc -l <<< "${value1/e/E} < ${value2/e/E}") ))
then
    echo "$value1 is below $value2"
fi 

1

কর্ন শেল ব্যবহার করুন, ব্যাশে আপনাকে দশমিক অংশটি আলাদাভাবে তুলনা করতে হতে পারে

#!/bin/ksh
X=0.2
Y=0.2
echo $X
echo $Y

if [[ $X -lt $Y ]]
then
     echo "X is less than Y"
elif [[ $X -gt $Y ]]
then
     echo "X is greater than Y"
elif [[ $X -eq $Y ]]
then
     echo "X is equal to Y"
fi

2
সমস্যাটি হ'ল অনেক ডিস্ট্রিবিউশনে ইনস্টল করা ksh আসে না এবং আপনার স্ক্রিপ্টটি অন্যরা ব্যবহার করতে চাইলে তারা অতিরিক্ত জিনিস ইনস্টল করার পছন্দ করেন না, বিশেষত যখন এটি কেবল একটি স্ক্রিপ্ট যা বাশে লেখা থাকে বলে মনে হয় - কেউ ভাবেন যে এটি করার জন্য তাদের আর কোনও শেলের দরকার নেই, যা প্রথমে ব্যাশ স্ক্রিপ্টটি ব্যবহারের পুরো কারণটিকে ক্ষুন্ন করে - নিশ্চয়ই আমরা সি ++ তেও কোডটি যেতে পারি, তবে কেন?
osirisgothra

Ksh ইনস্টল না করে আসা বিতরণগুলি কী কী?
পাইকুক

1
@ পাইকুক উদাহরণস্বরূপ, উবুন্টু ডেস্কটপ এবং সার্ভার। আমি বলব এটি বেশ বড় এক ...
ওলি

এছাড়াও, প্রশ্ন বিশেষত সমাধানের জন্য জিজ্ঞাসা করে যা ব্যাশে কাজ করে। এর জন্য সত্যিই ভাল কারণ থাকতে পারে। বলুন, এটি বৃহত প্রয়োগের অংশ এবং ksh এ সমস্ত কিছু স্থানান্তরিত করা সম্ভব নয়। বা এটি এম্বেড থাকা প্ল্যাটফর্মে চলছে যেখানে অন্য শেল ইনস্টল করা সত্যিই একটি সমস্যা।
ওলি

1

জাভা সমর্থন সহ একটি বাশ মিউট্যান্ট বাশজ ( https://sourceforge.net/projects/bashj/ ) ব্যবহার করে আপনি কেবল লিখেন (এবং এটি পড়তে সহজ):

#!/usr/bin/bashj

#!java
static int doubleCompare(double a,double b) {return((a>b) ? 1 : (a<b) ? -1 : 0);}

#!bashj
num1=3.17648e-22
num2=1.5
comp=j.doubleCompare($num1,$num2)
if [ $comp == 0 ] ; then echo "Equal" ; fi
if [ $comp == 1 ] ; then echo "$num1 > $num2" ; fi
if [ $comp == -1 ] ; then echo "$num2 > $num1" ; fi

অবশ্যই বাশ বাশ / জাভা সংকরন আরও অনেক কিছু সরবরাহ করে ...


0

এ কেমন? = D:

VAL_TO_CHECK="1.00001"
if [ $(awk '{printf($1 >= $2) ? 1 : 0}' <<<" $VAL_TO_CHECK 1 ") -eq 1 ] ; then
    echo "$VAL_TO_CHECK >= 1"
else
    echo "$VAL_TO_CHECK < 1"
fi

1
আওক স্ক্রিপ্টটি কেবল exit 0সত্যের প্রতিবেদন করা এবং exit 1মিথ্যা প্রত্যাবর্তন করা উচিত ; তারপরে আপনি উল্লেখযোগ্যভাবে মার্জিত করতে সহজতর করতে পারেন if awk 'BEGIN { exit (ARGV[1] >= ARGV[2]) ? 0 : 1 }' "$VAL_TO_CHECK" 1; then... (যদি আপনি শেল ফাংশনে অ্যাওক স্ক্রিপ্টটি encapsulate করেন তবে আরও মার্জিত)।
ট্রিপলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.