Identificarte

Versión Completa : Reemplazo por línea de comandos, ¿cómo lo harías?.


Sponsored links
.




Rachmaninov
abril 16, 2008, 05:54
Saludos comunidad.

Hace días se me presentó esta situación: tenía un archivo de la lista de paises del mundo con sus respectivos códigos según el estándar ISO-3166-1 (http://es.wikipedia.org/wiki/ISO_3166-1). Dicha lista estaba conformada por código numérico, código alpha-2, código alpha-3 y al final el nombre del país correspondiente. Cada dato estaba separado por "espacio", dicho separador de campo no era el más propicio ya que algunos nombres de paises tienen varias palabras también separada por espacio, ej.


004 AFG AF Afganistán
248 ALA AX Åland
...
180 COD CD República Democrática del Congo
En el ejemplo, las dos primeras líneas no presentan problema porque el nombre del país está conformado por una sola palabra; sin embargo en la línea posterior el nombre del país contiene varias: "República Democrática del Congo". Se me ocurrió cambiar entonces el caracter "espacio" por "tabulador", pero sólo debía reemplazar los 3 espacios iniciales y dejar lo demás tal cual.

En medio del carrerón de subir esta información a una tabla de una base de datos a la mayor brevedad, el machetón que hice fue ejecutar 3 comandos sed, así:


cat codigos | sed 's/\s/\t/1' > codigos1
cat codigos1 | sed 's/\s/\t/2' > codigos2
cat codigos2 | sed 's/\s/\t/3' > codigos_arreglado
Donde "codigos" corresponde al archivo original, básicamente es un sed reemplazando espacio por tabulación, el número al final (1, 2, 3) indican el número de la ocurrencia que se desea reemplazar. Esta secuencia me funcionó y el archivo quedó debidamente formateado, sin embargo, debe existir una forma más directa o simple de hacer esto. ¿Cómo lo harías?.

Krieg
abril 17, 2008, 03:42
sed -e 's/ /\t/1' -e 's/ /\t/1' -e 's/ /\t/1' codigos > codigos.fixed

De paso ahora pipes, archivos intermedios y procesos innecesarios que pueden causar demoras si el archivo es grande, pero no creo que sea el caso.

Rachmaninov
abril 17, 2008, 11:15
sed -e 's/ /\t/1' -e 's/ /\t/1' -e 's/ /\t/1' codigos > codigos.fixed

De paso ahora pipes, archivos intermedios y procesos innecesarios que pueden causar demoras si el archivo es grande, pero no creo que sea el caso.

Sí, aunque la diferencia de rendimiento no debe ser significante, quedaba la espina de que fue muy engorrosa y aparatosa la forma de solucionar el problema. Su solución es mucho más simple y elegante. Gracias.