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

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

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


From: Ronaldo Ferreira de Lima
Subject: Re: [shell-script] 51 uma boa idéia ...
Date: Sun, 28 Dec 2014 02:22:42 -0200
User-agent: mutt-ng/devel-r804 (Linux)

On Fri, Dec 26, 2014 at 11:25:22AM -0800, address@hidden [shell-script] wrote:
> 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.

Já que essa é a thread da 51, segue uma solução pudim de pinga:

    #!/usr/bin/sed -f
    
    1h
    2,${G;s/\n$//;h;}
    /^[^\n]\+\(\n[^\n]\+\)\{50\}$/ {
        : PASTE
        g
        $bEND
        /^\(\|.*\n\)\([^\n]\+\)$/ {
            s//\2/;
            N;s/\n/\t/;p;
            g
            s/\n\?[^\n]\+$//
            h
            b PASTE
        }
    }
    
    $!d;
    
    : END
    $ {
        :reverse
        s/^\(\|.*\n\)\([^\n]\+\)\n\([^\n]\+\)$/\3\n\2/p
        g
        s/\n\?[^\n]\+\n[^\n]\+$//;
        h
        t reverse
       /.*/{s/\n$//;p}
      d
    }

A prova do pudim foi a seguinte:

1. Conferir alguns offsets:
    $ seq -w 8000|
    sed -f sed.sed|
    grep -n -T -P '^(?:0001\t0052|0051\t0102|0103\t0154|0153\t0204)$'
       1   :0001    0052
      51   :0051    0102
      52   :0103    0154
     102   :0153    0204

2. Verificar se não deletei ou inseri nada:

    $ diff -s <(seq -w 8000) <(seq -w 8000|sed -f sed.sed|tr '\t' '\n'|sort|sed 
'1d')
    Files /proc/self/fd/11 and /proc/self/fd/12 are identical

Recomendo fortemente que você use uma solução sóbria.

[]'s
-- 
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
http://tecnoveneno.blogspot.com


reply via email to

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