Mam zmienne i chcę znaleźć wartość jednego podzielone przez inne. Jakie polecenia powinienem użyć, aby to zrobić?Jak dokonać podziału w konsoli systemu Linux?
Odpowiedz
Zakładam, że przez konsoli Linux masz na myśli Bash.
Jeśli zmiennymi są X
i Y
, zwracamy to, o co prosisz.
Nie potrzebujesz $ 's dla zmiennych – Draemon
W powłoki bash, otaczają wyrażeń arytmetycznych z $((...))
$ echo $((7/3))
2
Chociaż myślę, że są ograniczone do liczb całkowitych.
Tak, bash jest ograniczony do liczby całkowitej. – mkb
Przykład podziału całkowitej za pomocą bash do dzielenia $ a przez $ b:
echo $((a/b))
W bash, jeśli nie trzeba dziesiętnych w swojej dywizji, można zrobić:
>echo $((5+6))
11
>echo $((10/2))
5
>echo $((10/3))
3
I wciąż wolą używać dc, który jest kalkulator RPN, więc szybki sesji podzielić 67 przez 18 z 4 cyfr precyzja będzie wyglądać
>dc
4k
67
18/p
3.7222
q
>
Oczywiście, o wiele bardziej dostępny: człowiek dc
Kilka wskazówek, aby ewentualnie zapisać podróż do 'man': RPN = Reverse Polish Notation; w skrócie: najpierw wpisujesz operandy, potem operator. Koniec 'p' jest potrzebny do wyprowadzenia wyniku. Nieinteraktywna wersja powyższego obliczenia to: 'dc -e '4k 67 18/p''. Zastrzeżenie: brak ustawienia precyzji (przy '' numPlaces} k') przyjmuje wartość 0, tzn. Podział całkowity. – mklement0
Lepszym sposobem jest użycie "BC", kalkulator dowolnej precyzji.
variable=$(echo "OPTIONS; OPERATIONS" | bc)
ex:
my_var=$(echo "scale=5; $temp_var/100 + $temp_var2" | bc)
gdzie "skala = 5" jest dokładność.
man bc
zawiera kilka przykładów użycia.
Cool; jedna rzecz do zapamiętania: nie ustawiając 'scale' domyślnie na dzielenie całkowite - chyba że podasz' -l', jako @raytrace zauważa poniżej, co najwyżej daje 20 miejsc dziesiętnych domyślnie, ale także ładuje bibliotekę z dodatkowymi funkcjami. – mklement0
echo 5/2 | bc -l
2,50000000000000000000
to '-l' w opcji 'bc' pozwala pływających wyników
Cool; z '-l', dostajesz domyślnie 20 miejsc dziesiętnych * i * ładuje się bibliotekę matematyczną, która definiuje dodatkowe funkcje, takie jak sinus; aby jawnie określić liczbę miejsc dziesiętnych, należy poprzedzić wyrażenie za pomocą 'scale = {numPlaces};' (też), jak pokazano w odpowiedzi @ user1504475. Innymi słowy: '-l' jest wygodną alternatywą dla określenia' scale = 20; ', ale wiąże się z kosztem wydajności związanym z ładowaniem biblioteki - wpływ na rzeczywistość wydaje się być jednak pomijalny. – mklement0
coś jeszcze można zrobić przy użyciu raytrace za odpowiedź. Możesz użyć stdout innego wywołania powłoki, używając backticks, aby wykonać pewne obliczenia. Na przykład chciałem poznać rozmiar pliku 100 najlepszych wierszy z kilku plików. Oryginalny rozmiar z wc -c
jest w bajtach, chcę wiedzieć kilobajty. Oto co zrobiłem:
echo `cat * | head -n 100 | wc -c`/1024 | bc -l
Można użyć awk który jest narzędziem/język przeznaczony do ekstrakcji danych
przykład dla 1,2/3.4
>echo 1.2 3.4 | awk '{ print $2/$1 }'
0.352941
Należy spróbować użyć:
echo "scale=4;$variablename/3"|bc
można również użyć perl -e
perl -e 'print 67/8'
miałem również ten sam problem. Łatwo jest dzielić liczby całkowite, ale liczby dziesiętne nie są takie proste. jeśli masz 2 cyfry, takie jak 3,14 i 2,35 i podziel numery, następnie kod będzie Podział = echo 3.14/2.35 | bc
echo "$ Division" Cytaty są różne. Nie mylić, znajduje się tuż pod klawiszem esc na klawiaturze. JEDYNĄ RÓŻNICĄ JEST | bc, a także tutaj echo działa jako operator dla obliczeń arytmetycznych zamiast drukowania. Dodałem więc echo "$ Division" do drukowania wartości. Daj mi znać, czy to działa dla Ciebie. Dziękuję Ci.
Cytaty tutaj nie są wyświetlane, więc po prostu wstaw cytaty ('') after = i after bc. – SHIBLI
To nie są cytaty. Są to ostre akcenty. Nie wyświetlają się, ponieważ StackOverflow używa ich do podświetlania fragmentów kodu "jakiś kod tutaj" został właśnie zawinięty w ostre akcenty. –
Czy to naprawdę związane z programowaniem? [http://stackoverflow.com/faq] –
Sprawdź ten artykuł: [http://www.basicallytech.com/blog/index.php?/archives/23-command-line-calculations-using-bc.html] (http://www.basicallytech.com/blog/index.php?/archives/23-command-line-calculations-using-bc.html) – freitass
@ frank-v Bash może być używany do programowania ... także, ten link do faq nie działa – chomp