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

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

Re: [shell-script] Re: [shell-script] Re: [shell-script] Re: [shell-scri


From: Paulo
Subject: Re: [shell-script] Re: [shell-script] Re: [shell-script] Re: [shell-script] Re: Separar os dígitos de um número
Date: Thu, 31 Jan 2019 00:23:37 -0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.0

Olá Fernando, pode ser o locale?
Com pt_BR.UTF-8

numfmt --grouping 1234567
1.234.567

numfmt --grouping 123456,7
123.456,7

numfmt --grouping 123456.7
numfmt: sufixo inválido no entrada: “123456.7”

LANG=C numfmt --grouping 123456.7
123456.7

LANG=en_US numfmt --grouping 123456.7
123,456.7

Abraços Paulo

On 30/01/2019 17:15, Fernando Mercês address@hidden [shell-script] wrote:
Oi Alfredo. Valeu a dica do numfmt. Não conhecia. Fiz uns testes rápidos mas 
não rolou:

~ $ numfmt --grouping 1234567946548,2
numfmt: invalid suffix in input: ‘1234567946548,2’

~ $ numfmt --grouping 1234567946548.2
1234567946548.2

~ $ printf "%'.3f\n" 1234567946548,2
-bash: printf: 1234567946548,2: invalid number
0.000

~ $ printf "%'.3f\n" 1234567946548.2
1234567946548.200

~ $ numfmt --grouping 2147483647
2147483647

~ $ printf "%'.3f\n" 2147483647
2147483647.000

De qualquer forma, vou ler o manual com calma depois.

Muito obrigado e um abraço!

Att,

Fernando Mercês <https://twitter.com/mer0x36> | menteb.in <http://menteb.in>


On Wed, Jan 30, 2019 at 3:51 PM Alfredo Casanova address@hidden <mailto:address@hidden> [shell-script] <address@hidden <mailto:address@hidden>> wrote:

    __

    Sei que to bem atrasado na thread, mas já viram o comando numfmt?

    *numfmt --grouping 1234567946548,2*
    *1.234.567.946.548,2*

    ele também tem diversas outras funcionalidades, vale uma lidinha no man.

    Outra solução seria printf puro

    *printf "%'.3f\n" 1234567946548,2 *
    *1.234.567.946.548,200*

    ambos vão aplicar suas configurações de locale para funcionar


    On Fri, Dec 7, 2018 at 9:10 PM Fernando Mercês address@hidden 
<mailto:address@hidden> [shell-script]
    <address@hidden <mailto:address@hidden>> wrote:

        __

        Como sempre, nessa lista, muito mais que eu esperava. :)

        Muito obrigado, amigos!

        Att,

        Fernando Mercês <https://twitter.com/mer0x36> | menteb.in 
<http://menteb.in>


        On Fri, Dec 7, 2018 at 4:16 PM phfbettega address@hidden 
<mailto:address@hidden>
        [shell-script] <address@hidden <mailto:address@hidden>> wrote:

            __

            Olá T.Collons, no lugar do man sed, dê uma olhada no info sed, acho 
mais completo
            e mais detalhado com exemplos comentados.

            No sed do sourceforge:

            :a
            # O comando ':' cria uma marcação com o nome 'a', marca o ponto de 
volta para algum
            # comando de loop (b, t ou T).

            s/\B[0-9]\{3\}\>/ &/
            # A borda \B casa dois caracteres de palavra juntos, então essa ER 
casa uma palavra
            # de quatro dígitos, o primeiro é a borda \B seguida de três 
dígitos seguidos de
            # outra borda. Na primeira passada, o comando vai casar os três 
últimos dígitos no fim
            # da linha e substituir por <espaço> e os três dígitos casados.
            # Na segunda passada, pela ganância da ER, os últimos três dígitos 
seriam casados
            # novamente, mas aí entra em cena a \B, que só casa os três dígitos 
se houver outro
            # caracter de palavra antes.
            # Essa ER pode ser s/([0-9])([0-9]{3})\>/\1 \2/ mas nesse caso 
usando grupos.
            #
            # Não uso muito as bordas, então não sei se essa explicação está 
boa rs.
            # O info sed tem isso a respeito:
            '\B'
            Matches everywhere but on a word boundary; that is it matches if
            the character to the left and the character to the right are either
            both "word" characters or both "non-word" characters.

            $ echo "abc %-= def." | sed 's/\B/X/g'
            aXbXc X%X-X=X dXeXf.X

            '\>'
            Matches the end of a word.

            $ echo "abc %-= def." | sed 's/\>/X/g'
            abcX %-= defX.

            ta
            # Aqui o comando 't' confere se o comando 's' alterou o espaço 
padrão.
            # Se alterou, então pula para a marcação 'a'. Quando a ER falhar e 
não casar
            # mais nada na linha, o comando 's' não vai fazer nenhuma alteração 
e o
            # pulo para 'a' não será dado.

            Abraços Paulo

            sed -r ':a;/^[0-9]{,3} /q;s/[0-9]{3}($| )/ &/;ta'
            On 07/12/2018 11:55, 'T.Collons' address@hidden 
<mailto:address@hidden> [shell-script]
            wrote:
             > Hola a todos
             >
             >
             > Necesitaría que alguien me explicara la sintaxis de la orden de sed, con 
el "man sed" no
            consigo entenderlo.
             >
             > voy a explicar lo que yo entiendo.
             >
             > *:a* toma todo el conjunto de números
             >
             > *s/* comando de sed para substituir
             >
             > *\B[0-9]**\{3\} *toma solo grupos de 3 números
             >
             > *\>* no se para que sirve????
             >
             > *,& *substituirá el final del grupo de *\B[0-9]**\{3\} *por el 
carácter anterior al Ampersand,
            en este caso
             > una coma.
             > **
             >
             > *ta *Entiendo que la *a* se refiere al grupo de todos los 
números, pero la *t* no entiendo
            porque se usa.
             >
             >
             > Gracias de antemano por la explicación
             >
             >
             >
             > **
             >
             > El 7/12/18 a les 5:57, phfbettega address@hidden 
<mailto:address@hidden>
            [shell-script] ha escrit:
             >>
             >> rev é uma mão na roda :)
             >>
             >> Tem um sed que faz isso
             >>
             >> gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta'
             >>
             >> http://sed.sourceforge.net/sed1line.txt
             >>
             >> Abraços Paulo
             >>
             >> On 07/12/2018 02:17, Fernando Mercês address@hidden 
<mailto:address@hidden>
            [shell-script] wrote:
             >> > Acabei de matar um unicórnio:
             >> >
             >> > $ echo 2147483647 <tel:(21)%204748-3647> | rev | sed 's/.../& 
/g' | rev
             >> > 2 147 483 647
             >> >
             >> > Algo menos deselegante? 😁
             >> >
             >> > Att,
             >> >
             >> > Fernando Mercês <https://twitter.com/mer0x36> | menteb.in 
<http://menteb.in> <http://menteb.in>
             >> >
             >> >
             >> > On Fri, Dec 7, 2018 at 2:11 AM Fernando Mercês <address@hidden 
<mailto:address@hidden>
            <mailto:address@hidden <mailto:address@hidden>>> wrote:
             >> >
             >> > Oi pessoal!
             >> >
             >> > Hoje tava checando uma falha que saiu no PolicyKit [1] 
(aliás, atualizem seus sistemas ;-))
            e pintou a
             >> > dúvida de como fazer um número ser organizado com espaços 
para melhor compreensão. Tipo:
             >> >
             >> > Entrada: 2147483647 <tel:(21)%204748-3647>
             >> > Saída: 2 147 483 647
             >> >
             >> > Basicamente seria dizer que a cada três dígitos, de trás para 
frente, seja colocado um espaço.
             >> >
             >> > Eu consigo fazer na ordem direta com o sed:
             >> >
             >> > $ echo 2147483647 <tel:(21)%204748-3647> | sed 's/.../& /g'
             >> > 214 748 364 7
             >> >
             >> > Alguma ideia de como conseguir isso "de trás pra frente" de 
forma rápida?
             >> >
             >> > Abraços!
             >> >
             >> > [1] 
https://thehackernews.com/2018/12/linux-user-privilege-policykit.html
             >> >
             >> > Att,
             >> >
             >> > Fernando Mercês <https://twitter.com/mer0x36> | menteb.in 
<http://menteb.in> <http://menteb.in>
             >> >
             >> >
             >> > ----------------------------------------------------------
             >> > Enviado por: =?UTF-8?Q?Fernando_Merc=C3=AAs?= <address@hidden 
<mailto:address@hidden>>
             >> > ----------------------------------------------------------
             >> > Responder através da web
             >>
             > --
             >
             >
             >
             > Pere
             >
             > address@hidden <mailto:address@hidden> <mailto:address@hidden
            <mailto:address@hidden>>
             >
             >
             >
             > <https://www.google.com/>
             >
             > ------------------------------------
             >
             > AVIS LEGAL
             >
             > Nota de confidencialitat: Aquest missatge podria contenir 
missatges d'empresa i altre
            informació confidencial
             > tutelada per les lleis de Europea i altres estats, Si Vostè el 
rep per error o sense ser una de
            les persones
             > esmenades a la capçalera, haurà de destruir-lo sense copiar-lo 
ni revelar-l'ho o qualsevol
            altre acció
             > relacionada amb el contingut del missatge i notificar-ho per 
correu electrònic a l'emissor del
            missatge.
             >
             > Les persones o entitats que incompleixin els deures de 
confidencialitat podran ésser
            perseguides davant dels
             > Tribunals de Justícia sota l'empar de la legislació civil, penal 
i administrativa nacional i
            internacional.
             >
             > Gracies per la seva cooperació.
             >
             > ------------------------------------
             >
             > LEGAL NOTICE
             >
             > Confidentiality notice: This mail may include business and other 
confidential information
            protected under the
             > laws of and other territories. if you are not one of the 
intended recipients of the message,
            you are legally
             > obliged to delete the message content. Furthermore, you are 
kindly requested to report
            immediately the
             > incident to the sender.
             >
             > Breach of confidentiality duties is a serious criminal offence 
in and other territories.
            Offenders shall be
             > legally prosecuted worldwide.
             >
             > Thank you for your cooperation.
             >
             >
             >
             >
             > ----------------------------------------------------------
             > Enviado por: "T.Collons" <address@hidden <mailto:address@hidden>>
             > ----------------------------------------------------------
             > Responder através da web


--------------------------------------------------------------------------------------------------------------
Enviado por: =?UTF-8?Q?Fernando_Merc=C3=AAs?= <address@hidden>
--------------------------------------------------------------------------------------------------------------
Responder através da web


reply via email to

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