Adicionando uma nova coluna usando informações de subcabeçalhos

4

Substituindo as linhas que contêm um padrão por sed

Obrigado a @don_crissti e @Archemar. Eu acho que minha pergunta não é uma duplicação da pergunta acima.

Então aqui está um exemplo de entrada. Editar: Todas as seções têm valores. Eu adicionei outra complexidade ao subtítulo (eu deveria ter feito isso).

DATA1

NAME: A (X)
12,1
13,2
14,4

NAME: B (X)
21,2
22,3

NAME: C (X)
24,4

A saída desejada deve se parecer com

DATA1

A    12,1
A    13,2
A    14,4

B    21,2
B    22,3

C    24,4
    
por ahelix 21.07.2015 / 22:37

2 respostas

3

Parece que o seu separador de saída é de 4 espaços, então é isso que este exemplo usa - mude para o que você precisar, por exemplo, para uma TAB, OFS="\t"

awk 'NR==1 || NF==0 {print; next}  # main heading and blank lines 
     $1=="NAME:" {name=$2; next}   # section name/header
     {print name, $1}              # data lines
    ' OFS="    " file

Saída:

DATA1

A    12,1
A    13,2
A    14,4

B    21,2
B    22,3

C    24,4
    
por 21.07.2015 / 22:53
2

Aqui está o sed. Eu não recomendo

sed -n '
    1 {p; n}
    /^[[:blank:]]*$/ {p; n}
    /^NAME: \+/ {s///; h; n}
    {H; g; s/\n/ /; p; s/ .*//; h}
' file

Ele faz exatamente o que o comando awk do Peter faz, exceto que o sed tem apenas uma variável: o espaço de espera.

    
por 21.07.2015 / 23:11

Tags