Duplicar o campo na primeira coluna

1

Eu tenho a entrada abaixo

L12194C;               
           ;1;8;12     
           ;2;30;46    
           ;3;49;71    
           ;4;0;0      
           ;5;0;0      
           ;6;1;3      
L15698A2;              
           ;4;2;4      
           ;5;0;0      
           ;6;0;0      
L2281A2;               
           ;4;1;2      
           ;5;0;0      
12302C;                
           ;1;8;11     
           ;2;1;1      
           ;3;1;1      
           ;4;1;2      
           ;5;2;4      
           ;6;0;0      

Eu quero que a saída seja

L12194C;1;8 ;12        
L12194C;2;30;46        
L12194C;3;49;71        
L12194C;4;0;0          
L12194C;5;0;0          
L12194C;6;1;3          

L15698A2;4;2;4         
L15698A2;5;0;0         
L15698A2;6;0;0         

L2281A2;4;1;2          
L2281A2;5;0;0          

12302C;1;8;11          
12302C;2;1;1           
12302C;3;1;1           
12302C;4;1;2           
12302C;5;2;4           
12302C;6;0;0           
    
por Tony 26.06.2015 / 19:10

4 respostas

1

use AWk :

awk '!/^[[:blank:]]/{j=$1;print "";next}{print j$1}' FILENAME

saída:

L12194C;;1;8;12
L12194C;;2;30;46
L12194C;;3;49;71
L12194C;;4;0;0
L12194C;;5;0;0
L12194C;;6;1;3

L15698A2;;4;2;4
L15698A2;;5;0;0
L15698A2;;6;0;0

L2281A2;;4;1;2
L2281A2;;5;0;0

12302C;;1;8;11
12302C;;2;1;1
12302C;;3;1;1
12302C;;4;1;2
12302C;;5;2;4
12302C;;6;0;0
    
por 26.06.2015 / 20:00
1

Talvez seja assim:

sed -E '
    1{ h; d; }
    /^[^ \t]/{ h; s/.*//; p; d; }
    s/^[ \t]+;//; G; s/^(.*)\n(.*)$//'

Saída:

L12194C;1;8;12
L12194C;2;30;46
L12194C;3;49;71
L12194C;4;0;0
L12194C;5;0;0
L12194C;6;1;3

L15698A2;4;2;4
L15698A2;5;0;0
L15698A2;6;0;0

L2281A2;4;1;2
L2281A2;5;0;0

12302C;1;8;11
12302C;2;1;1
12302C;3;1;1
12302C;4;1;2
12302C;5;2;4
12302C;6;0;0
    
por 26.06.2015 / 20:01
0

Os campos são constantes? Ou seja, todos os campos entre os; são dados relacionados ... Se os campos são constantes, pessoalmente, eu usaria um banco de dados como o sqlite e inserir os dados no banco de dados e, em seguida, usar consultas para produzir os dados da maneira que você preciso disso. Você também pode usar uma matriz e organizar os campos na saída dessa maneira também.

    
por 26.06.2015 / 19:26
0

Outro sed :

sed -ne'h;s/.*//p;x;:n' -e'N;s/;.* //p;tn' -eD <in >out

sed salva uma cópia do espaço padrão em h old space, s/// ubstitui todo o espaço padrão e p rints os resultados, em seguida, e x changes h old e espaços padrão. Isso acontece em cada primeira linha de campo não em branco e obtém os espaços em branco na saída, quando apropriado.

Para cada outra linha, sed também anexa o N ext após um delimitador% e_line% e, em seguida, tenta \n ubstitutar todo o espaço entre o primeiro ponto e o último espaço. Se ambos os caracteres ocorrerem no espaço padrão, a substituição s/// ests será bem-sucedida e t voltará ao rótulo sed ext para tentar novamente.

Senão :n sed elimina até e inclusive o primeiro D ewline que está ocorrendo no espaço padrão antes de começar do início w / o que quer que permaneça.

Meus resultados:

L12194C;1;8;12
L12194C;2;30;46
L12194C;3;49;71
L12194C;4;0;0
L12194C;5;0;0
L12194C;6;1;3

L15698A2;4;2;4
L15698A2;5;0;0
L15698A2;6;0;0

L2281A2;4;1;2
L2281A2;5;0;0

12302C;1;8;11
12302C;2;1;1
12302C;3;1;1
12302C;4;1;2
12302C;5;2;4
    
por 27.06.2015 / 00:14

Tags