Problema:
De vez en cuando necesito hacer operaciones aritméticas simples en un entorno de línea de comandos. EG dado el siguiente resultado:
Disk /dev/sdb: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 106MB 105MB fat32 hidden, diag
2 106MB 64.1GB 64.0GB ext4
3 64.1GB 192GB 128GB ext4
5 236GB 256GB 20.0GB linux-swap(v1)
¿Cuál es una manera simple de calcular en la línea de comando el tamaño del espacio no asignado entre las particiones 3 y 5?
Lo que ya he probado:
antes de Cristo
bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
236-192
44
quit
donde el negrita de arriba es todo lo que necesito escribir para hacer un simple 236-192
como bc 1+1
ecosFile 1+1 is unavailable.
expr
expr 236 - 192
donde necesito escribir espacios antes y después del operador como expr 1+1
solo ecos 1+1
.
shell
calculator
Fabby
fuente
fuente
quit
enbc
; presionarctrl-D
servirá, como lo hará en cualquier programa interactivo.dc
es (IMO) muy superior abc
.Respuestas:
Puede reducir en gran medida la cantidad de verbosidad involucrada en el uso de
bc
:(suponiendo que su shell lo soporte).
Si prefieres tener eso como una función:
Almacene la
c
definición en su archivo de inicio de shell favorito si desea que esté siempre disponible.fuente
bc<RET>236-128<RET>quit<RET>
son 16 pulsaciones de teclas.bc<<<"236-128"<RET>
son 15 pulsaciones de teclas. No es lo que yo llamaría "cantidad de tipeo muy reducida" :-) Además,bc
se puede salir^D
, por lo que la primera opción se reduce a 13 pulsaciones de teclas (contando^D
como dos).c 1+1
es justo lo que necesitaba! :-) (respuesta actualizada parabc -l
en la definición de la función para hacerlo más capaz.Cáscara
El cálculo más simple en CLI es el CLI (shell) en sí (si
IFS
está predeterminado):Se pueden omitir espacios:
Como es parte de POSIX, casi todos los shells lo tienen. E incluye la mayor parte de la funcionalidad matemática del lenguaje C (excepto que zsh tiene una precedencia diferente, establezca C_PRECEDENCES para restaurarlo a un valor compatible):
Y algunos shells tienen la mayor parte de la sintaxis matemática del lenguaje C (incluida la coma):
Pero es solo matemática entera (y generalmente menos de 2 63 en los sistemas operativos actuales) en algunos shells:
Algunas conchas podrían hacer matemática flotante:
Evite zsh (zcalc tiene problemas similares):
Te recomiendo evitar
expr
, a veces necesita escapes extraños:antes de Cristo
En el siguiente nivel está ( también POSIX )
bc
(primo de RPNdc
)La
dc
era de POSIX, pero se habían eliminado en 2017 .Más corto si su shell lo admite:
O incluso:
Ambas son calculadoras de precisión arbitrarias con algunas funciones matemáticas internas:
awk
Después de esas herramientas de cálculo realmente básicas , debe pasar a otros idiomas
función
Puede definir una función de cualquiera de las opciones anteriores:
Y use:
fuente
Al leer los comentarios de esta página , veo un programa UNIX / Linux llamado
calc
que hace exactamente lo que quieres. Si está en Debian / Ubuntu / derivados:entonces tú puedes:
y si agregas un alias
alias c='calc'
a tu.bashrc
o/etc/bash.bashrc
simplemente se convierte en:en la línea de comando.
fuente
En
zsh
:fuente
El
units
programa, aunque no está destinado a ser utilizado como una calculadora, en realidad funciona bastante bien como tal.Si hay espacios en la expresión, entonces la expresión debe estar protegida por comillas.
Admite exponenciales y anidamiento profundo de corchetes
fuente
units -t -d 10 "236GB - 192GB" GB
salidas44
,units -t -d 15 "236GB - 192GB" bytes
salidas44000000000
, etc.Como se comentó en un comentario a una respuesta anterior, el shell estándar (ba) sh permite evaluar las expresiones aritméticas dentro
$((...))
. No pude verificar dos veces si esto es parte del estándar POSIX, pero verifiqué que también funciona en Cygwin y el shell Mingw32.Para ver el resultado, tendría que escribir
echo $((...))
, lo que hace que algunos caracteres sean más que (uso interactivo de)bc
. Sin embargo, para usar el resultado en un script, esto probablemente será más corto que labc
solución (que podría ser, por ejemplo`echo ...|bc`
).En cuanto a la verbosidad, el
bc
comando permite la opción-q
que suprime la salida de la "bc
bienvenida normal de GNU " .Como comentario final, ligeramente límite, tengamos en cuenta que
bc
no es solo una calculadora, sino más bien un lenguaje de programación completo (incluidas las funciones definidas por el usuario, while y for loops, etc.). Otro hecho que sugiere preferir las capacidades aritméticas integradas para cálculos tan simples, en lugar de un programa externo. Dicho esto, extraer los datos para los números de partición dados y tratar con los sufijos "M", "G", como parecía preguntar la pregunta original, podría requerir(g)awk
más quebc
.Fuentes: https://www.gnu.org/software/bc/manual/html_mono/bc.html https://www.gnu.org/software/gawk/manual/html_node/Getting-Started.html
fuente
$((...))
se llama Expansión Aritmética y es parte de POSIX: pubs.opengroup.org/onlinepubs/9699919799/utilities/… Para mí, el mayor inconveniente de esta característica de un shell POSIX es que solo admite aritmética de enteros :(Lo que hago en zsh es:
En bash, tendría que mencionar explícitamente cat:
Si quisiera que el resultado incluyera dígitos fraccionarios (funciona en zsh, no en bash), agregaría un punto de raíz a uno de los operandos
fuente
echo $((236 - 128))
también funciona ;-).zsh -c 'print $((12345678901234567890123 + 1))' zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1 -1363962815083169259
.zsh -c 'print $((12345678901234567890123 + 1))'
yzsh -c 'print $((123456789012345678901 + 1))'
. Se está truncando a diferentes longitudes y produciendo diferentes resultados numéricos.bash -c 'echo $((1<<63))'
y `` bash -c 'echo $ (((1 << 63) -1))' '.Personalmente, me gusta libqalculate (la versión de línea de comandos de Qalculate ).
Si bien la interfaz es ciertamente simple, (lib) qalculate es una calculadora potente y completa. p.ej
También hace cosas útiles como completar pestañas, abrir / cerrar paréntesis cuando sea necesario e imprime su interpretación de la consulta.
Para salir, simplemente presiono Ctrl + d.
Para un acceso aún más rápido, configúrelo en algo como
alias ca='qalc'
.fuente
Python abierto en otra pestaña?
fuente
dc -e '236 192-p'
... por supuesto, si no está familiarizado
dc
y necesita más que restar dos números, pasará más tiempo buscando cómo usardc
(y tal vez RPN en general) de lo que ahorrará con métodos más familiares.fuente
Si tienes instalado Gradle, entonces tienes maravilloso ...
Si Groovy está correctamente aplicado, deberías poder usar:
Esto puede parecer un poco redundante con todos los otros ejemplos, pero:
Si no tiene Java instalado, probablemente no valga la pena instalar groovy & java; es solo una opción si Groovy ya está disponible.
fuente
¿Has probado concalc ?
Instalar con:
fuente
Antes de publicar cualquiera de las otras respuestas brillantes, terminé creando el script que
/usr/local/bin/c
contenía:entonces: escribiendo
c 1+1
rendimientos2
! :-)Nota 1: Utilicé
c
porque ese comando no existe en ningún sistema Unix que pude encontrar. Si hubieras alias eso a tu compilador de c, usa cualquier otra cosa que sea corta y no la uses.Nota 2: Fuente
fuente
echo "$*" | bc -l
como el shebang que usaste/bin/sh
y no sé si tienes ksh / bash / zsh disponible. (2) Tenga en cuenta que puede cambiar la escala para calcular si ejecuta 'c' scale = 60; 777/333 ', por ejemplo. Espero que ayude @FabbySi Python está instalado, puede realizar muchas operaciones matemáticas a través de la línea de comandos. Traté de proporcionar un ejemplo a continuación.
He usado
python3
, puedes usarpython
. La diferencia entrepython
ypython3
ocurre cuando se produce una operación dividida (fraccionada), para evitar el problema, consulte a continuación python vs python3 .Sumar, restar, multiplicar y dividir:
Módulo-resto de la división:
División de piso:
Exponente - x a la potencia de y (x ^ y):
Raíz cuadrada (ej .: √4 = 2):
El logaritmo natural de x = log (x):
El logaritmo de base 10 de x = log10 (x):
Factorial (ej: 3! = 3.2.1 = 6):
Trigonometry-
sin(x)
,cos(x)
,tan(x)
:Para ver más funciones relacionadas con las matemáticas, consulte aquí .
-Para dividir: (usar flotante):
-en lugar de
Eso es. ¡Feliz codificación!
fuente
Ya sea
bc
oqalc
.Para tener automáticamente un
bc
redondeo siempre a dos dígitos: (ejecutarlo-l
es difícil de manejar para el día a día)Edita tu
~/.bashrc
:Abre un nuevo shell y corre
bc
allí.fuente
Crear una línea:
Ahora puede usar matemáticas enteras simples:
fuente
${1}
uso del parámetro es exclusivo de todas las respuestas.${1}
;-)