Inserindo um quebra de linha em linhas começando com um padrão

0

Eu tenho um arquivo enorme que tem o seguinte formato:

#pair:  0   1   0   1   0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
#pair:  1   2   0   1   1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
#pair:  1   2   1   2   0   0   1

Eu gostaria de encontrar cada linha que começa com "#pair:" e mover as últimas 3 colunas diretamente abaixo dessa linha.Por exemplo:

#pair:  1   2   1   2   0   0   1

muda para:

#pair:  1   2   1   2   
0   0   1

Como posso fazer isso com um comando que funciona no Linux?

    
por user3559605 22.04.2014 / 10:56

2 respostas

1

É um pouco detalhado com o awk:

awk '
    $1=="#pair:" {
        sep=""
        for (i=1; i<NF-2; i++) {
            printf "%s%s", sep, $i
            sep="\t"
        }
        print ""
        printf "%s\t%s\t%s\n", $(NF-2), $(NF-1), $NF
        next
    }
    1
' <<END
#pair:  0       1       2       3       4       5       6
0       0       1
#pair:  0       1       2       31      4       5       6
0       0       1
END
#pair:  0       1       2       3
4       5       6
0       0       1
#pair:  0       1       2       31
4       5       6
0       0       1
    
por 22.04.2014 / 13:09
1

Você pode dizer a sed para fazer isso:

sed '/^#/ s/'$'\t''\([0-9]'$'\t''[0-9]'$'\t''[0-9]\)$/\n/'
     ^    ^    ^     ^                                ^ ^
     |    |    |     |                                | |
     |  replace|   digit                              | What was remembered
line starts   tab                                     | in the 1st \(...\)
with a #                                           newline
    
por 22.04.2014 / 11:22