shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: [ expr ] - Saída do AWK


From: Gustavo Filgueiras
Subject: Re: [shell-script] Re: [ expr ] - Saída do AWK
Date: Fri, 12 Sep 2014 15:10:31 -0300

Caros,

   Obrigado pela resposta de todos, mas alguém sabe me dizer pq ele arredonda a saida ?

# ls -l|grep arquivo.img|awk '{printf "%1.3fGB\n", $5/1024/1024/1024}'
0.098GB

# ls -l|grep arquivo.img|awk '{printf "%1.2fGB\n", $5/1024/1024/1024}'
0.10GB

   ele não deveria imprimir 0.09 ao invés de 0.10 ?

[]´s
Gustavo


Em 12 de setembro de 2014 15:03, Paulo Bettega address@hidden [shell-script] <address@hidden> escreveu:
Opa Rodrigo fucei aqui no awk(livro do Julio) e com printf dá pra fazer tudo.
Pelo jeito, dependendo da potência (10 ou 2) arredonda pra cima ou pra baixo.

ls -l|grep testeseg-01.mp3|awk '{print $5}'
5567895

ls -l|grep testeseg-01.mp3|awk '{printf "%1.3fGB\n", $5/1000/1000/1000}'
0.006GB

ls -l|grep testeseg-01.mp3|awk '{printf "%1.3fGB\n", $5/1024/1024/1024}'
0.005GB

Abraços Paulo Bettega


On 12-09-2014 14:18, Rodrigo Tenorio address@hidden [shell-script] wrote:
> Oooo Paulo, agora que me atentei de fato na sua resposta.
> Eu acabei fazendo a mesma coisa de maneira mais feia. É minha correria... Perdão, camarada!
> :(
>
> Em 12/09/2014 14:07, "Rodrigo Tenorio" <address@hidden
> <mailto:address@hidden>> escreveu:
>
>     Testei aqui. Encontrei erro... arrumado ficaria assim.
>     Echo "scale=3;$(ls -l |grep arquivo.img | awk '{printf $5}{print .1024.1024.1024}' | sed -e
>     's#0[.]#\/#g')" | bc
>
>     O awk sisma em colocar os .1024 como 0.1024...
>     Com o sed eu burlei isso, não é o mais bonito, mas funciona. Rs
>
>     Acho que deve existir opção mais limpa, mas to sem tempo pra pesquisar.
>
>     #Dividir por 1000 não deixa o calculo exato. Eu não faria isso se precisasse de precisão no calculo.
>
>     Em 12/09/2014 13:44, "Rodrigo Tenorio" <address@hidden
>     <mailto:address@hidden>> escreveu:
>
>         Então teste: ls -l |grep arquivo.img | awk '{printf $5}{print .1024.1024.1024}' | sed -e
>         "s#[.]#\/#g | bc
>
>         Em 12/09/2014 12:31, "Paulo Bettega address@hidden <mailto:address@hidden>
>         [shell-script]" <address@hidden <mailto:address@hidden>>
>         escreveu:
>
>             Com a aritmética do shell não dá porque não trabalha com casas decimais.
>
>             A solução do Rodrigo funciona, mas tem que tirar as divisões do awk e mandar
>             pro bc senão a opção scale fica sem efeito. Ou então fazer tudo dentro
>             do awk, mas não sei como.
>
>             echo "scale=3;$(ls -l etc.tgz|awk '{print $5/1024/1024/1024}')"| bc
>             .00294341
>
>             echo "scale=3;$(ls -l etc.tgz|awk '{print $5}')/1024/1024/1024"| bc
>             .002
>
>
>             Dividindo por 1000 ao invés de 1024, o resultado é mais próximo
>             do tamanho que o ls -l retorna. Deve ser o problema de potência de 10 ou de 2.
>
>             ls -l etc.tgz|awk '{print $5}'
>             3160461
>
>             bc <<<"scale=3;$(ls -l etc.tgz|awk '{print $5}')/1000/1000/1000"
>             .003
>
>             Abraços Paulo Bettega
>
>
>             On 12-09-2014 12:05, Rodrigo Tenorio address@hidden
>             <mailto:address@hidden> [shell-script] wrote:
>              > Acredito que para este cenário o ideal é você concatenar as linhas dos comandos de
>             forma que montem
>              > a expressão e alimentar o bc.
>              > Acho que dá pra fazer "pipeando"...
>              > Algo como:
>              > ls -l |grep arquivo.img | awk '{print $5 / 1024 /1024/1024}' | bc
>              >
>              > Devo ter escrito alguma coisa errada no comando. Não estou com condições de testar no
>             momento... mas
>              > veja se te ajuda...
>              >
>              > Em 12/09/2014 11:57, "Gustavo Filgueiras address@hidden
>             <mailto:address@hidden> <mailto:address@hidden
>             <mailto:address@hidden>>
>              > [shell-script]" <address@hidden
>             <mailto:address@hidden> <mailto:address@hidden
>             <mailto:address@hidden>>> escreveu:
>              >
>              >     __
>              >
>              >     Paulo,
>              >
>              >         Obrigado pelas respostas, mas eu estou tentando fazer sem usar variavel, eu
>             consegui chegar
>              >     até essa linha
>              >     echo $(( $(ls -l |grep arquivo.img | awk '{print $5}') / 1024 / 1024 / 1024 ))
>              >
>              >     me retorna: 0
>              >
>              >     acredito que se eu tivesse conseguindo ver 2 casas decimais, retornaria: 0.09
>              >
>              >
>              >     Em 12 de setembro de 2014 11:41, Paulo Bettega address@hidden
>             <mailto:address@hidden>
>              >     <mailto:address@hidden <mailto:address@hidden>> [shell-script]
>             <address@hidden <mailto:address@hidden>
>              >     <mailto:address@hidden
>             <mailto:address@hidden>>> escreveu:
>              >
>              >         Ainda na pergunta anterior :) com expr, e no awk acho que também dá.
>              >         (desculpem se entendi errado a pergunta).
>              >
>              >         $ ls -l etc.tgz|awk '{print $5}'
>              >         3160461
>              >
>              >         $ ls -l etc.tgz|awk '{print $5*8}'
>              >         25283688
>              >
>              >         $ expr $(ls -l etc.tgz|awk '{print $5}') \* 8
>              >         25283688
>              >
>              >         Meu pensamento na tua dúvida desse email, ficou meio feio mas
>              >         acho que faz o trabalho.
>              >
>              >         $ tamanho=$(ls -l etc.tgz|awk '{print $5}')
>              >         $ [ "$tamanho" -lt 1000000000 ] && echo 0$(bc <<<"scale=3;$tamanho/1000000000")GB
>              >         0.003GB
>              >
>              >         Abraços Paulo Bettega
>              >
>              >         On 12-09-2014 10:16, Gustavo Filgueiras address@hidden
>             <mailto:address@hidden>
>              >         <mailto:address@hidden <mailto:address@hidden>>
>             [shell-script] wrote:
>              >         > Caros,
>              >         >
>              >         >
>              >         >      Muito obrigado por todas as respostas e soluções, minha dúvida foi
>             solucionada.
>              >         >      Porém pesquisando mais, estou com outra dúvida.
>              >         >
>              >         >      Gostaria de extrair o tamanho em GB, mas levando em conta o arquivo de
>             100MB, se eu der um ls
>              >         > -l --block-size=G |grep arquivo.img, vai me retornar 1GB.
>              >         >       ls -l --block-size=G |grep arquivo.img
>              >         >       -rw-r--r-- 1 root root 1G Sep 11 15:16 arquivo.img
>              >         >
>              >         >       Mas gostaria que me retorna-se mais preciso, de verdade ele deveria
>             retornar ( 0.09765625 )
>              >         > mas se possivel cortar em 2 casas decimais. Procurei algo, mas nada
>             funcionou bem, tentei usando
>              >         > printf mas sem sucesso.
>              >         >
>              >         >       0.09 GB
>              >         >
>              >          > Em 12 de setembro de 2014 02:11, Fernando Mercês address@hidden
>             <mailto:address@hidden>
>              >         <mailto:address@hidden <mailto:address@hidden>>
>             <mailto:address@hidden <mailto:address@hidden> <mailto:address@hidden
>             <mailto:address@hidden>>>
>              >          > [shell-script] <address@hidden
>             <mailto:address@hidden> <mailto:address@hidden
>             <mailto:address@hidden>>
>              >         <mailto:address@hidden
>             <mailto:address@hidden> <mailto:address@hidden
>             <mailto:address@hidden>>>> escreveu:
>              >          >
>              >          >     __
>              >         >
>              >         >     Ok, última mensagem sobre... Mas acho que vale a pena ver opções
>             diferentes pra mesma coisa:
>              >         >
>              >         >     $ stat -c %s*8 mail.php | bc
>              >         >     2272
>              >         >
>              >         >     Agora sim, fui. o/
>              >         >
>              >         >
>              >         >
>              >         >
>              >         >     Att,
>              >         >
>              >         >     Fernando Mercês
>              >         >     Linux Registered User #432779
>              >          > www.mentebinaria.com.br <http://www.mentebinaria.com.br>
>             <http://www.mentebinaria.com.br> <http://www.mentebinaria.com.br>
>              >         >     ------------------------------------
>              >         >     "Ninguém pode ser escravo de sua identidade; quando surge uma
>             possibilidade de mudança é preciso
>              >         >     mudar". (Elliot Gould)
>              >         >
>              >          >     2014-09-12 2:01 GMT-03:00 Fernando Mercês <address@hidden
>             <mailto:address@hidden>
>              >         <mailto:address@hidden <mailto:address@hidden>>
>             <mailto:address@hidden <mailto:address@hidden> <mailto:address@hidden
>             <mailto:address@hidden>>>>:
>              >         >
>              >         >         De novo, sei que já resolveu o problema, mas se precisar de
>             desempenho pra isso (for fazer
>              >         >         com muitos arquivos), fiz uma implementaçãozinha rápida em ANSI C,
>             assim você não depende do
>              >         >         bash, bc, nem mesmo do Linux. Imitei a saída do wc. ;-)
>              >         >
>              >         >         $ gcc -o bits bits.c
>              >         >
>              >         >         $ ./bits mail.php .ssh/config .htcfg2
>              >         >         2272 mail.php
>              >         >         20376 .ssh/config
>              >         >         14064 .htcfg2
>              >         >         36712 total
>              >         >
>              >         >         $ ./bits mail.php
>              >         >         2272 mail.php
>              >         >
>              >         >         Aí se for o caso você altera como quiser, pra não imprimir o nome
>             do arquivo, ou não
>              >         >         imprimir o total.. Enfim, tu que sabe. :)
>              >         >         Mesmo que não use, já me diverti. Sem erro. hehe
>              >         >
>              >         >         Abraço!
>              >         >
>              >         >
>              >         >
>              >         >         Att,
>              >         >
>              >         >         Fernando Mercês
>              >         >         Linux Registered User #432779
>              >          > www.mentebinaria.com.br <http://www.mentebinaria.com.br>
>             <http://www.mentebinaria.com.br> <http://www.mentebinaria.com.br>
>              >         >         ------------------------------------
>              >         >         "Ninguém pode ser escravo de sua identidade; quando surge uma
>             possibilidade de mudança é
>              >         >         preciso mudar". (Elliot Gould)
>              >         >
>              >          >         2014-09-12 1:09 GMT-03:00 Fernando Mercês <address@hidden
>             <mailto:address@hidden>
>              >         <mailto:address@hidden <mailto:address@hidden>>
>             <mailto:address@hidden <mailto:address@hidden> <mailto:address@hidden
>             <mailto:address@hidden>>>>:
>              >         >
>              >         >             Opa, sei que já foi respondido, mas se você já sabe o nome do
>             arquivo, por que usar ls |
>              >         >             grep? Eu faria direto, e talvez com o wc ao invés do ls ;-)
>              >         >
>              >         >             Com aritimética do bash:
>              >         >             $ echo $(($(wc -c < mail.php) * 8))
>              >         >             2272
>              >         >
>              >         >             Com aritimética do bc:
>              >         >             $ echo "$(wc -c < mail.php) * 8" | bc
>              >         >             2272
>              >         >
>              >         >             Abraço!
>              >         >
>              >         >
>              >         >
>              >         >             Att,
>              >         >
>              >         >             Fernando Mercês
>              >         >             Linux Registered User #432779
>              >          > www.mentebinaria.com.br <http://www.mentebinaria.com.br>
>             <http://www.mentebinaria.com.br> <http://www.mentebinaria.com.br>
>              >         >             ------------------------------------
>              >         >             "Ninguém pode ser escravo de sua identidade; quando surge uma
>             possibilidade de mudança é
>              >         >             preciso mudar". (Elliot Gould)
>              >         >
>              >          >             2014-09-11 16:55 GMT-03:00 address@hidden
>             <mailto:address@hidden>
>              >         <mailto:address@hidden <mailto:address@hidden>>
>             <mailto:address@hidden <mailto:address@hidden>
>              >         <mailto:address@hidden <mailto:address@hidden>>>
>              >          >             [shell-script] <address@hidden
>             <mailto:address@hidden>
>              >         <mailto:address@hidden
>             <mailto:address@hidden>> <mailto:address@hidden
>             <mailto:address@hidden>
>              >         <mailto:address@hidden
>             <mailto:address@hidden>>>>:
>              >          >
>              >          >                 __
>              >         >
>              >         >                 Claro que a conversao no caso foi base 2 mas pode ser
>             base=8 ou base=16 etc..
>              >         >                 Abracp
>              >         >
>              >         >
>              >         >
>              >         >
>              >         >
>              >         >
>              >
>              >


------------------------------------

------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil


------------------------------------

Links do Yahoo Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    address@hidden

<*> O uso que você faz do Yahoo Grupos está sujeito aos:
    https://info.yahoo.com/legal/br/yahoo/utos/terms/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]