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: Julio C. Neves
Subject: Re: [shell-script] 51 uma boa idéia ...
Date: Sun, 28 Dec 2014 14:12:42 -0200

Ronaldo,
Guenta aí, vou tomar uma 204 (4 doses de 51). Para conseguir entender a sua solução... Coisa de doido, sô! ;)

Em 28/12/2014 02:22, "Ronaldo Ferreira de Lima address@hidden [shell-script]" <address@hidden> escreveu:
 

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]