Insertar un salto de línea en líneas que comienzan con un patrón

0

Tengo un archivo enorme que tiene el siguiente 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

Me gustaría encontrar cada línea que comience con "#pair:" y mover las últimas 3 columnas directamente debajo de esta línea. Por ejemplo:

#pair:  1   2   1   2   0   0   1

cambios a:

#pair:  1   2   1   2   
0   0   1

¿Cómo puedo hacer eso con un comando que funciona en Linux?

usuario3559605
fuente
¿Están separados por 3 espacios cada uno, o pestañas? ¿O eso es irrelevante?
slhck

Respuestas:

1

Es un poco detallado con 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
Glenn Jackman
fuente
1

Puedes decir sedque hagas eso:

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