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 15:03:06 -0300
User-agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.1.0

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
             >         >
             >         >
             >         >
             >         >
             >         >
             >         >
             >
             >


reply via email to

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