Vertikal formatieren und dabei die erste Spalte beibehalten

Vertikal formatieren und dabei die erste Spalte beibehalten

Es ist lange her, dass ich grep oder sed verwendet habe, aber ich denke, das ist möglich. Wie nehme ich eine CSV-Datei und formatiere sie vertikal, während ich die ersten Spalten beibehalte/repliziere?

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

Antwort1

Sie könnten dies mit sedoder vielleicht mit einigen Versionen von tun grep, aber mit awkkönnen Sie sehr elegant ausdrücken, was Sie erreichen möchten:

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

Wenn das Skript Dateinamen oder die Standardeingabe übernehmen soll, ersetzen Sie das „hier-Dokument“ (alles vom bis <<zum Ende der Datei) durch:

"$@"

Antwort2

Eine sedLösung.

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

verwandte Informationen