Usando awk
$ awk -v RS='[,\n]' '{a=$0;getline b; getline c; print a,b,c}' OFS=, filename
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O
Como funciona
-
-v RS='[,\n]'Isto diz ao awk para usar qualquer ocorrência de uma vírgula ou uma nova linha como um separador de registro.
-
a=$0; getline b; getline cIsso diz ao awk para salvar a linha atual na variável
a, a próxima linha em variávelbe a próxima linha depois disso na variávelc. -
print a,b,cIsso diz ao awk para imprimir
a,bec -
OFS=,Isto diz ao awk para usar uma vírgula como separador de campos na saída.
Usando tr e paste
$ tr , '\n' <filename | paste -d, - - -
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O
Como funciona
-
tr , '\n' <filenameIsso lê o nome do arquivo ao converter todas as vírgulas em novas linhas.
-
paste -d, - - -Este
pastepara ler três linhas de stdin (uma para cada-) e colá-las juntas, cada uma separada por uma vírgula (-d,).
awk alternativo
$ awk -v RS='[,\n]' '{printf "%s%s",$0,(NR%3?",":"\n")}' filename
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O
Como funciona
-
-v RS='[,\n]'Isto diz ao awk para usar qualquer ocorrência de uma vírgula ou uma nova linha como um separador de registro.
-
printf "%s%s",$0,(NR%3?",":"\n")Isso diz ao awk para imprimir a linha atual, seguida por uma vírgula ou uma nova linha, dependendo do valor do número da linha atual,
NR, módulo 3.