Formatear verticalmente manteniendo la primera columna

Formatear verticalmente manteniendo la primera columna

Ha pasado mucho tiempo desde que usé grep o sed, pero creo que esto se puede hacer. ¿Cómo tomo un csv y lo formateo verticalmente mientras mantengo/replico las primeras columnas?

Ex.
Input:
A, 1, 2, 3
B, 1, 2, 3
C, 1, 2, 3

Output:
A, 1
A, 2
A, 3
B, 1
B, 2
B, 3
C, 1
C, 2
C, 3

Respuesta1

Podrías hacerlo con sed, o tal vez con algunas versiones de grep, sin embargo, usándolo awkpuedes expresar de manera muy elegante lo que quieres lograr:

#!/bin/sh

awk -F, '
    BEGIN {
        OFS=","
    }
    {
        for (i=2; i<=NF; i++) {
            print $1, $i
        }
    }
' <<EOF
A, 1, 2, 3
B, 1, 2, 3
C, 1, 2, 3
EOF

Si desea que el script tome nombres de archivos o entradas estándar, reemplace el "documento aquí" (todo desde el <<hasta el final del archivo) con:

"$@"

Respuesta2

Una sedsolución.

sed -r ':a;s/([A-Z],)( [0-9]),( [0-9])/\1\2\n\1\3/;ta' <<<'A, 1, 2, 3
B, 1, 2, 3
C, 1, 2, 3'
A, 1
A, 2
A, 3
B, 1
B, 2
B, 3
C, 1
C, 2
C, 3

información relacionada