
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 sed
oder vielleicht mit einigen Versionen von tun grep
, aber mit awk
kö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 sed
Lö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