
Este es mi archivo de texto:
0019121002313002316003135
0057936000814000814003023
0081638001519001523001176
0090531001841001842002633
0111210001515001518000912
0115400001807001828001593
Quiero la salida procesada como:
0019121,002313,002316,003135
0057936,000814,000814,003023
0081638,001519,001523,001176
0090531,001841,001842,002633
0111210,001515,001518,000912
0115400,001807,001828,001593
¿Cómo hago esto?
Respuesta1
$ sed -E 's/(.{7})(.{6})(.{6})(.{6})/\1,\2,\3,\4/' file
0019121,002313,002316,003135
0057936,000814,000814,003023
0081638,001519,001523,001176
0090531,001841,001842,002633
0111210,001515,001518,000912
0115400,001807,001828,001593
Es decir, haga coincidir los bits de cada línea que componen los nuevos campos e inserte una coma entre ellos. La coincidencia de un campo se realiza utilizando .{7}
o .{6}
dependiendo de la longitud del campo deseada.
Respuesta2
Con GNU awk ( gawk
) puedes establecer anchos de campo explícitos:
$ gawk '{$1=$1} 1' FIELDWIDTHS='7 6 6 6' OFS=, file
0019121,002313,002316,003135
0057936,000814,000814,003023
0081638,001519,001523,001176
0090531,001841,001842,002633
0111210,001515,001518,000912
0115400,001807,001828,001593
Respuesta3
Suponiendo que no es un error que la primera coma esté después de 7 caracteres y las siguientes estén en múltiplos de 6, propongo
sed 's/\(.......\)\(......\)\(......\)/\1,\2,\3,/'