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

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

Re: [Bulk] Re: [shell-script] 51 uma boa idéia ...


From: Julio C. Neves
Subject: Re: [Bulk] Re: [shell-script] 51 uma boa idéia ...
Date: Sat, 27 Dec 2014 10:47:22 -0200

Fala Sidney,
Houve um mal emtendido ou escrevi mal. O cmd column é antigo. O novo é o mapfile que lê direto para um vetor e é extremamente veloz.
Com o mapfile vc pode ir carregando 102 registros - 2 colunas de 51 - de cada vez e com o column vc divide em 2.
Assim, a cada volta de um loop vc incrementa a opção -O (origin) em 102 e prompt... ;)
Se não entendeu explico depois, mas estou respondendo em um celular na praia e quase não dá pra ler o que escrevo.

Em 26/12/2014 22:23, "Sidney Souza address@hidden [shell-script]" <address@hidden> escreveu:
 

E eu aqui já pensando até em utilizar caracteres de controle e quando vê o Julio me sai com esse comando MAGNÍFICO (column). Cada dia me supreende mais essa linguagem.

Não bastasse as artimanhas do awk me deparei recentemente com alguns problemas matemáticos que o bc, juntamente com sua linguagem interna, resolveu lindamente.

Mas Julio, você disse que essa feature é exclusiva da versão 4, teria como montar essas colunas em versões inferiores sem utilizar os caracteres de controle?


On Fri, Dec 26, 2014 at 6:37 PM, 'Julio C. Neves' address@hidden [shell-script] <address@hidden> wrote:
 

Isso é um prato cheio para um dos mais novos intrínsecos (built in) do Bash, pois só foi incorporado na v 4.0; Veja seu man:

       mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
       readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
              Read lines from the standard input into the indexed array variable array, or from file descriptor fd if the -u  option  is  supplied.   The
              variable MAPFILE is the default array.  Options, if supplied, have the following meanings:
              -n     Copy at most count lines.  If count is 0, all lines are copied.
              -O     Begin assigning to array at index origin.  The default index is 0.
              -s     Discard the first count lines read.
              -t     Remove a trailing newline from each line read.
              -u     Read lines from file descriptor fd instead of the standard input.
              -C     Evaluate callback each time quantum lines are read.  The -c option specifies quantum.
              -c     Specify the number of lines read between each call to callback.

Ou seja vc lê para um vetor com -O 1 e -n 102.

Antes de continuar, execute a seguinte linha:
$ seq -w 102 | column -c16
Era isso que vc queria? Então basta usar o cmd column no vetor, passar -O para 52 e começar de novo (obviamente isso está dentro de um while)


Abcs,
Julio
@juliobash
P
róximos cursos de Shell
Cidade         Local Período
Rio de Janeiro EDX 09 a 13/03/15
São Paulo 4Linux 24 a 28/11/14
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.


Em 26 de dezembro de 2014 17:25, address@hidden [shell-script] <address@hidden> escreveu:
 

Pessoal,


Estou com um arquivo com mais de 8000 linhas, mais preciso dividir em duas colunas em blocos de 51 linhas, ou seja :


COL1 | COL2
1-51 | 52-103
104-155 | 156-207

...

Ou seja preciso pegar os blocos de 51 linhas e colocar o segundo bloco de 51 linhas em uma coluna ao lado do primeiro bloco e assim por diante, tentei resolver usando o awk mas não consegui.




reply via email to

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