Formata verticalmente mantendo a primeira coluna

3

Já faz muito tempo desde que usei grep ou sed, mas acho que isso pode ser feito. Como faço para tomar um csv e formatá-lo verticalmente, mantendo / replicando as primeiras colunas.

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
    
por Steve Zemlicka 05.01.2018 / 00:56

2 respostas

2

Você poderia fazer isso com sed , ou talvez algumas versões de grep , no entanto, usando awk você pode expressar com muita elegância o que deseja realizar:

#!/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

Se você quiser que o script tenha nomes de arquivo ou entrada padrão, substitua o "aqui documento" (tudo do << ao final do arquivo) por:

"$@"
    
por 05.01.2018 / 01:31
1

Uma solução sed .

sed -r ':a;s/([A-Z],)( [0-9]),( [0-9])/\n/;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
    
por 05.01.2018 / 01:45

Tags