cat <<'EOF' |
13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096
EOF
perl -wpe '1 while s/(\d+)(\d\d\d)/$1,$2/;'
produce:
13,407,807,929,942,597,099,574,024,998,205,846,127,479,365,820,592,393,377,723,561,443,721,764,030,073,546,976,801,874,298,166,903,427,690,031,858,186,486,050,853,753,882,811,946,569,946,433,649,006,084,096
Esto se logra dividiendo la cadena de dígitos en 2 grupos, el grupo de la derecha con 3 dígitos, el grupo de la izquierda con lo que queda, pero al menos un dígito. Luego, todo se reemplaza por los 2 grupos, separados por una coma. Esto continúa hasta que la sustitución falla. Las opciones "wpe" son para la lista de errores, encierran la declaración dentro de un bucle con una impresión automática y toman el siguiente argumento como el "programa" perl (vea el comando perldoc perlrun para más detalles).
Mis mejores deseos ... salud, drl
echo 123456789 | awk '$0=gensub(/(...)/,"\\1,","g")'