Pelo menos com GNU sed
e supondo que seus campos não podem conter separadores de vírgulas incorporados , você poderia fazer
sed 's/,/\n/6; P; D' roll.txt
que repetidamente tenta substituir a sexta vírgula por uma nova linha, imprime e, em seguida, exclui a parte do espaço padrão até a nova linha.
NOTA: não é necessário implementar um teste / ramificação explícita, pois o comando D
implicitamente "reinicia o ciclo" no restante da linha:
D
If pattern space contains no newline, start a normal new cycle
as if the d command was issued. Otherwise, delete text in the pattern
space up to the first newline, and restart cycle with the resultant
pattern space, without reading a new line of input.
(credite a @RakeshSharma por esclarecer isso).
Ex.
sed 's/,/\n/6; P; D' roll.txt
'123456789','987651234','129873645','213456789','987612345','543216789'
'432156789','876543291','213465789','542637819','123456','23456'
'22234','3456','7890543','34567891,'2345','567'
Como alternativa, com o módulo Text::CSV
de Perl:
perl -MText::CSV -ne '
BEGIN{$p = Text::CSV->new()}
@fields = $p->fields() if $p->parse($_);
do {
print join ",", splice @fields, 0, 6; print "\n";
} while @fields
' roll.txt
'123456789','987651234','129873645','213456789','987612345','543216789'
'432156789','876543291','213465789','542637819','123456','23456'
'22234','3456','7890543','34567891,'2345','567'