Tengo un archivo de texto enorme que se ve así:
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,3
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,8
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,12
La salida deseada es esta:
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-03
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-08
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,MI-12
He probado otras publicaciones relevantes aquí y en otras comunidades, pero no pude obtener exactamente lo que quiero.
ACTUALIZAR
Esta es la pregunta cruzada (quería respuestas Unix / perl y soluciones batch / powershell para esto) que tiene respuestas interesantes.
fuente

"1 2 3 4" | awk '{$2=$2;print $0}'da:1 2 3 4(solo queda 1 espacio (u OFS) entre campos). ex2)echo "1,,,2,3,,,,4" | awk -F',' '{$2=$2;print $0}'da:1 2 3 4(las comas se convirtieron en espacios). Podría haber otros efectos secundarios. Pruebe y adopte otro enfoque (gsub en una variable de copia de $ 0, por ejemplo) si asignar un campo tiene efectos secundarios perjudiciales.Puedes intentar usar
awk:fuente
Aquí está la solución perl:
El
-aindicador nos permite tratar la entrada como una matriz, basada en el separador especificado con-F. Básicamente, modificamos el último elemento de esa matriz y lo reconstruimos mediante unjoincomando.fuente
sprintfsiendo la idea central de su respuesta. No es como si no fuera correcto, simplemente no ofrece algo diferente a la respuesta aceptada. +1 de todos modos.sprintf()se usa típicamente cuando se escribe una cadena de formato específico en una variable, razón por la cual se usa en muchos otros idiomas. También puedo escribirlo en Python: Python no tiene,sprintf()pero la idea central será la misma independientemente: escribir una cadena formateada en una variable. Alternativamente, podemos operar en elementos de matriz directamente e imprimirlos. Con este tipo de preguntas hay una cantidad finita de soluciones, básicamente es lo que estoy tratando de decirCon datos de entrada como:
en text.csv
el siguiente código
produce resultados como:
fuente
Tcl
Aquí está mi solución, hecha usando Tcl que lee del archivo input.csv y coloca el resultado en el archivo output.csv
demostración
fuente