Questão:
De vez em quando, preciso fazer aritmética simples em um ambiente de linha de comando. EG dada a seguinte saída:
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)
Qual é uma maneira simples de calcular na linha de comando o tamanho do espaço não alocado entre as partições 3 e 5?
O que eu já tentei:
bc
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
onde o negrito acima é tudo o que eu preciso digitar para fazer um simples 236-192
como bc 1+1
ecosFile 1+1 is unavailable.
expr
expr 236 - 192
onde eu preciso digitar espaços antes e depois do operador expr 1+1
apenas como ecos 1+1
.
shell
calculator
Fabby
fonte
fonte
quit
embc
; pressionarctrl-D
fará, como acontece em qualquer programa interativo.dc
é (IMO) muito superior abc
.Respostas:
Você pode reduzir bastante a quantidade de verbosidade envolvida no uso de
bc
:(supondo que seu shell suporte isso).
Se você preferir ter isso como uma função:
Armazene a
c
definição no seu arquivo de inicialização do shell favorito, se desejar torná-la sempre disponível.fonte
bc<RET>236-128<RET>quit<RET>
é de 16 teclas.bc<<<"236-128"<RET>
é de 15 teclas. Não é o que eu chamaria de "quantidade bastante reduzida de digitação" :-) Além disso,bc
pode ser encerrada com^D
, portanto, a primeira opção é reduzida para 13 pressionamentos de tecla (contando^D
como dois).c 1+1
é exatamente o que eu precisava! :-) (resposta atualizada para fazer com que mais clara)bc -l
na definição da função para torná-la mais capaz.Concha
O cálculo mais simples na CLI é a própria CLI (shell) (se
IFS
for o padrão):Os espaços podem ser omitidos:
Como faz parte do POSIX, quase todas as conchas o possuem. E inclui a maior parte da funcionalidade matemática da linguagem C (exceto que o zsh tem uma precedência diferente, defina C_PRECEDENCES para restaurá-lo para um valor compatível):
E alguns shells possuem a maior parte da sintaxe matemática da linguagem C (incluindo vírgula):
Mas é apenas matemática inteira (e geralmente menor que 2 63 nos sistemas operacionais atuais) em algumas conchas:
Algumas conchas podem fazer cálculos flutuantes:
Evite o zsh (o zcalc tem problemas semelhantes):
Eu recomendo que você evite
expr
, às vezes precisa de escapamentos estranhos:bc
No próximo nível é ( também POSIX )
bc
(primo da RPNdc
)A
dc
era POSIX mas foi removido em 2017 .Mais curto se o seu shell o suportar:
Ou até:
Ambos são calculadoras de precisão arbitrárias com algumas funções matemáticas internas:
awk
Depois dessas ferramentas básicas de cálculo, você precisa ir para outros idiomas
função
Você pode definir uma função de qualquer uma das opções acima:
E use:
fonte
Lendo os comentários desta página , vejo um programa UNIX / Linux chamado
calc
que faz exatamente o que você deseja. Se estiver no Debian / Ubuntu / derivados:então você pode:
e se você adicionar um alias
alias c='calc'
ao seu.bashrc
ou/etc/bash.bashrc
então ele se tornará:na linha de comando.
fonte
Em
zsh
:fonte
O
units
programa, embora não se destine a ser usado como calculadora, na verdade funciona bastante bem como um.Se houver espaços na expressão, ela deverá estar protegida por aspas.
Suporta exponenciais e aninhamento profundo de colchetes
fonte
units -t -d 10 "236GB - 192GB" GB
saídas44
,units -t -d 15 "236GB - 192GB" bytes
saídas44000000000
, etc.Conforme comentado em um comentário a uma resposta anterior, o shell padrão (ba) sh permite avaliar expressões aritméticas em
$((...))
. Não pude verificar se isso faz parte do padrão POSIX, mas verifiquei se ele também funciona no Cygwin e no shell Mingw32.Para ver o resultado, você precisaria digitar
echo $((...))
, o que torna alguns caracteres mais do que (uso interativo de)bc
. No entanto, para usar o resultado em um script, provavelmente será mais curto que abc
solução (que pode ser, por exemplo,`echo ...|bc`
).No que diz respeito à verbosidade, o
bc
comando permite a opção-q
que suprime a saída do "bc
bem-vindo normal ao GNU " .Como uma observação final, levemente limítrofe, observe que
bc
não é apenas uma calculadora, mas uma linguagem de programação completa (incluindo funções definidas pelo usuário, while & for loops, etc etc). Outro fato que sugere preferir os recursos aritméticos integrados para cálculos tão simples, em vez de um programa externo. Dito isso, extrair os dados para o (s) número (s) de partição e lidar com os sufixos "M", "G", como parecia a pergunta original, poderia exigir(g)awk
mais do quebc
.Fontes: https://www.gnu.org/software/bc/manual/html_mono/bc.html https://www.gnu.org/software/gawk/manual/html_node/Getting-Started.html
fonte
$((...))
é chamado de expansão aritmética e faz parte do POSIX: pubs.opengroup.org/onlinepubs/9699919799/utilities/… Para mim, a maior desvantagem desse recurso de um shell POSIX é que ele suporta apenas aritmética inteira :(O que faço no zsh é:
No bash, eu teria que mencionar explicitamente cat:
Se eu quisesse que o resultado incluísse dígitos fracionários (funciona no zsh, não no bash), adicionaria um ponto de raiz a um dos operandos
fonte
echo $((236 - 128))
funciona também ;-).zsh -c 'print $((12345678901234567890123 + 1))' zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1 -1363962815083169259
.zsh -c 'print $((12345678901234567890123 + 1))'
ezsh -c 'print $((123456789012345678901 + 1))'
. É truncado em diferentes comprimentos e produzindo resultados numéricos diferentes.bash -c 'echo $((1<<63))'
e `` bash -c 'echo $ (((1 << 63) -1))' '.Pessoalmente, gosto da libqalculate (a versão da linha de comandos do Qalculate ).
Embora a interface seja certamente simples, (lib) qalculate é uma calculadora poderosa e completa. por exemplo
Ele também faz coisas úteis como o preenchimento de guias, abre / fecha parênteses quando necessário e imprime sua interpretação da consulta.
Para sair, basta pressionar Ctrl+d .
Para um acesso ainda mais rápido, defina-o para algo como
alias ca='qalc'
.fonte
Python aberto em outra guia?
fonte
dc -e '236 192-p'
... é claro, se você não estiver familiarizado
dc
e precisar mais do que subtrair dois números, gastará mais tempo pesquisando como usardc
(e talvez o RPN em geral) do que economizará com métodos mais familiares.fonte
Se você tem o gradle instalado, você tem ...
Se o groovy estiver no caminho correto, você poderá usar:
Isso pode parecer um pouco redundante com todos os outros exemplos, mas:
Se você não possui o java instalado, provavelmente não vale a pena instalar o groovy & java - é apenas uma opção se o groovy já estiver disponível.
fonte
Já experimentou concalc ?
Instale com:
fonte
Antes de qualquer outra resposta brilhante ser publicada, acabei criando o script que
/usr/local/bin/c
continha:então: digitando
c 1+1
rendimentos2
! :-)Nota 1: usei
c
porque esse comando não existe em nenhum sistema Unix que eu pudesse encontrar. Se você aliasse isso ao seu compilador c, use qualquer outra coisa curta e que não use.Nota 2: Origem
fonte
echo "$*" | bc -l
como o shebang que você usava/bin/sh
e não sei se você tem o ksh / bash / zsh disponível. (2) Observe que você pode alterar a escala a ser calculada se executar a escala `c '= 60; 777/333', por exemplo. Espero que ajude @FabbySe o python estiver instalado, você poderá executar muitas operações matemáticas por meio da linha de comando. Eu tentei fornecer um exemplo abaixo.
Eu usei
python3
você pode usarpython
. A diferença entrepython
epython3
ocorre quando a operação dividida (fracionária) ocorre, para evitar o problema, veja abaixo python vs python3 .Adicionar, subtrair, multiplicar e dividir:
Módulo - remanescente da divisão:
Divisão de piso:
Expoente - x à potência de y (x ^ y):
Raiz quadrada (ex: √4 = 2):
O logaritmo natural de x = log (x):
O logaritmo da base 10 de x = log10 (x):
Fatorial (ex: 3! = 3.2.1 = 6):
Trigonometry-
sin(x)
,cos(x)
,tan(x)
:Para mais funções relacionadas à matemática, verifique aqui .
-Para dividir: (use float):
-ao invés de
É isso aí. Feliz codificação!
fonte
Ou
bc
ouqalc
.Para ter automaticamente
bc
sempre um arredondamento para dois dígitos: (executá-lo-l
é pesado para as coisas do dia a dia)Edite seu
~/.bashrc
:Abra um novo shell e corra para
bc
lá.fonte
Criando uma linha única:
Agora você pode usar matemática inteira simples:
fonte
${1}
uso do parâmetro é exclusivo para todas as respostas.${1}
;-)