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: Paulo Bettega
Subject: Re: [shell-script] Re: [ expr ] - Saída do AWK
Date: Fri, 12 Sep 2014 12:31:59 -0300
User-agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.1.0

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 [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>
[shell-script]" <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> [shell-script] <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> [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>>
         > [shell-script] <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>
        >     ------------------------------------
        >     "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>>>:
        >
        >         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>
        >         ------------------------------------
        >         "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>>>:
        >
        >             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>
        >             ------------------------------------
        >             "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>>
         >             [shell-script] <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
        <mailto:address@hidden>
        ---------------------------------------------------------------------
        Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
        ---------------------------------------------------------------------
        Servidor Newsgroup da lista: news.gmane.org <http://news.gmane.org>
        Grupo: gmane.org.user-groups.programming.shell.brazil


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

        Links do Yahoo Grupos






reply via email to

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