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
-a
indicador 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 unjoin
comando.fuente
sprintf
siendo 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