Que tal algo como isto
perl -F, -alne '
my @a = split "C", @F[1];
my @b = (map { $_ ? length $_ : "" } @a);
print join ",", (@F, join "c", @b)
' file.csv
c32_g1_i1_3,SCIPKHEECTNDKHNCCRKGLFKLKCQCSTFDDESGQPTERCACGRPMGHQAIETGLNIFRGLFKGKKKNKKTKG,1c6c6cc8c1c13c1c31
c32_g1_i1_6,ACAERKKKCTKDDDCSCCGKWDKCSCNWPGREGCFCMRGMMATRLWKMAKC,1c6c5c1cc5c1c7c1c14
Ou mais compactamente
perl -F, -alne '
print join ",", (@F, join "c", (map { $_ ? length $_ : "" } split "C", @F[1]))
' file.csv
Para obter o comportamento desejado quando há um C à direita na entrada, é necessário modificar o comando split com um parâmetro explícito LIMIT , como observado - de alguma forma opaco - no split () perldoc :
Então a expressão se torna
$ perl -F, -alne '
print join ",", (@F, join "c", (map { $_ ? length $_ : "" } split "C", @F[1], -1))
' file.csv
c32_g1_i1_3,SCIPKHEECTNDKHNCCRKGLFKLKCQCSTFDDESGQPTERCACGRPMGHQAIETGLNIFRGLFKGKKKNKKTKG,1c6c6cc8c1c13c1c31
c32_g1_i1_6,ACAERKKKCTKDDDCSCCGKWDKCSCNWPGREGCFCMRGMMATRLWKMAKC,1c6c5c1cc5c1c7c1c14c
(inspiração para o map tirado da a maneira mais rápida de remover elementos de array vazios )