Вы можете выполнить эту задачу различными способами, как показано ниже:
$ sed -e ':a
s/,/\n/2;/\n/!b
P;s/,.*\n/,/;ba
' file.csv
Пояснение:
Мы пытаемся заменить вторую запятую новой строкой. Если это невозможно => пространство шаблонов было меньше двух и, следовательно, должно быть передано в стандартный вывод.
OTW, мы печатаем первые две запятые -поля, разделенные -, затем удаляем второе поле, чтобы третье теперь стало вторым и так далее.
$ perl -F, -lane '
my $f1 = shift @F;
print join ",", $f1, $_ for @F;
' file.csv
Пояснение:
Разделите каждую строку на поля через запятую, и perl
сохранит поля в массиве @F. Первое поле мы смещаем из массива @F и сохраняем в скаляре $f1
. Затем последовательно печатайте элементы массива.
$ perl -F\(,\) -lane '
my $f1 = shift @F;
print $f1, splice @F, 0, 2 while @F > 1 ;
' file.csv
$ perl -F, -lane 'print $F[0], $_ for /,(?:(?!,).)*/g' file.csv
$ sed -Ee 's/,?[^,]*/[&] /g' file.csv |
dc -e "
[q]sq
[SMlN1+sNz1<a]sa
[dnLMn10anlN1-dsN0<b]sb
[?z0=q0sNlaxlbxclcx]sclcx
"
Результат:
1,a
1,b
1,c
2,b
2,c
3,e
3,f
4,l