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. –
- 1. Jakieś różnice wizualne w konsoli systemu Linux?
- 2. Jak napisać pełnoekranową aplikację/skrypt konsoli do systemu Linux?
- 3. Jak dokonać podziału danych z wyprzedzeniem pasującym do łańcucha znaków
- 4. Jak mogę dokonać warunkowej zamiany w Perlu?
- 5. Lepsza powłoka systemu Linux?
- 6. syslog_r dla systemu Linux?
- 7. Jak wysłać wiadomość z Facebooka z konsoli linux (linia poleceń)
- 8. Resetowanie polecenia systemu Linux (1) jest powolne
- 9. Wykrywanie systemu Windows lub Linux?
- 10. Jak wykorzystać licznik z jądra systemu Linux?
- 11. Jak działa blokowanie wejść/wyjść systemu Linux?
- 12. HeapCreate, HeapAlloc w systemie Linux, prywatny przydział dla systemu Linux
- 13. Skopiuj wszystkie wpisane polecenie w konsoli systemu Linux i ich wynik do pliku
- 14. Perfmon-like dla systemu Linux?
- 15. Linux dodaje wyjście konsoli do pliku logu?
- 16. Emulator BlueStacks dla systemu Linux?
- 17. Interpreter JavaScript dla systemu Linux
- 18. Alternatywa TextMate dla systemu Linux
- 19. Linii i pętli systemu Linux
- 20. Wykonywanie polecenia systemu Linux w programie c
- 21. Jak dokonać podziału macierzy na jedną kolumnę, zachować typ danych macierzy, zachować nazwy wierszy/kolumn?
- 22. Czy można fałszywe api konsoli systemu Windows?
- 23. Jak programowo uzyskać rozdzielczość okna i systemu w systemie Linux?
- 24. Jak odczytać/zapisać pliki w module jądra systemu Linux?
- 25. Jak wyzwalać fałszywe budzenie w aplikacji systemu Linux?
- 26. Jak tymczasowo dostosować datę/czas w powłoce systemu Linux
- 27. Jak mogę wywołać systemowe wywołanie systemu Linux/UNIX w golang
- 28. Jak dokonać wyboru większy
- 29. UTF-8 wyjście na konsoli systemu Windows
- 30. Jak korzystać z podziału?
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