[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