(SOLUCIONADO) Ayuda para reemplazar palabras en un .txt con batch usando Sed

Iniciado por miguel088, 8 Noviembre 2013, 15:13 PM

0 Miembros y 1 Visitante están viendo este tema.

miguel088

Buenos días, soy novato en esto de los scripts y necesitaría vuestra ayuda.

Os cuento, tengo un txt similar a este:

location,day name,high,low,degrees unit,icon.png,windspeed,windspeed unit,wind_dir
LEMD,Friday,17,5,C,4.png,5,Kph,W
LEMD,Saturday,14,6,C,4.png,4,Kph,NW
LEMD,Sunday,16,7,C,2.png,4,Kph,NNW
LEMD,Monday,21,9,C,1.png,4,Kph,N
LEMD,Tuesday,21,8,C,1.png,4,Kph,N
LEMD,Wednesday,18,5,C,1.png,5,Kph,NNE
LEMD,Thursday,18,7,C,1.png,3,Kph,NE



Lo que necesitaría es que a través de un batch traducir los días de la semana a castellano y quede como esto, pero en otro txt diferente:

location,day name,high,low,degrees unit,icon.png,windspeed,windspeed unit,wind_dir
LEMD,Viernes,17,5,C,4.png,5,Kph,W
LEMD,Sábado,14,6,C,4.png,4,Kph,NW
LEMD,Domingo,16,7,C,2.png,4,Kph,NNW
LEMD,Lunes,21,9,C,1.png,4,Kph,N
LEMD,Martes,21,8,C,1.png,4,Kph,N
LEMD,Miércoles,18,5,C,1.png,5,Kph,NNE
LEMD,Jueves,18,7,C,1.png,3,Kph,NE


He probado con este codigo:

sed.exe -e "s/Friday/Viernes/" TIEMPO.txt >TIEMPOSCAS.txt

Y funciona, instalando la aplicación Sed en mi pc según he leído en algún hilo antiguo del foro. El problema es, que no he conseguido encontrar la solución, que me sustituya en un solo comando todas los días de la semana de todas las lineas y no solo uno como en el ejemplo.

He probado distintas cosas, separar los datos con dobles comillas o con tuberias...pero ninguno me ha funcionado. Estoy seguro que es alguna tontería y alguien mas capacitado que yo seguramente los sepa, por eso recurro a vosotros.

Espero que alguien me pueda ayudar.

Muchas gracias de antemano y un saludo.


miguel088

Cita de: Almapa en  9 Noviembre 2013, 12:17 PM
Solo puede ser un comando?

O en varios, me explique mal, me referia a hacerlo en una sola acción. Pero se puede utilizar todos los comandos que hagan falta.

mad_soft

Ya lo habrás pensado y no será lo que pidas, pero
¿Porque no creas un script que lo haga?
pega tantas lineas como días quieras remplazar y luego ejecutas el script

#!/bin/bash
sed.exe -e "s/Friday/Viernes/" TIEMPO.txt >TIEMPOSCAS.txt

SuSE 13.2 + Kernel 3.16

miguel088

Cita de: mad_soft en  9 Noviembre 2013, 12:53 PM
Ya lo habrás pensado y no será lo que pidas, pero
¿Porque no creas un script que lo haga?
pega tantas lineas como días quieras remplazar y luego ejecutas el script

#!/bin/bash
sed.exe -e "s/Friday/Viernes/" TIEMPO.txt >TIEMPOSCAS.txt


Lo pensé y lo probé, pero el problema es que me traducia solo la ultima linea, ya que se va ejecutando el comando sobre el txt original y en el txt resultante solo salia traducida la última linea.

Imagino que habrá alguna forma (que desconozco) es que dentro de ese comando sed se puedan meter todas las traducciones.

Almapa

#5
Esto en batch funciona, mira a ver si te sirve:

@echo off
cls
Setlocal EnableDelayedExpansion
set /p archivo="Arrastra el archivo a modificar: "
for /f "tokens=*" %%a in ('type %archivo%') do (call :cambiar %%a)
:cambiar
set var=%*
if %2==Monday (echo %var:Monday=Lunes%>>nuevo.txt) else (if %2==Tuesday (echo %var:Tuesday=Martes%>>nuevo.txt) else (if %2==Wednesday (echo
%var:Wednesday=Miércoles%>>nuevo.txt) else (if %2==Thursday (echo %var:Thursday=Jueves%>>nuevo.txt) else (if %2==Friday (echo %var:Friday=Viernes%>>nuevo.txt) else (if %2==Saturday (echo %var:Saturday=Sábado%>>nuevo.txt) else (if %2==Sunday (echo %var:Sunday=Domingo%>>nuevo.txt) else (echo %var%>nuevo.txt)))))))
GOTO :eof



Un saludo

mad_soft

claro, porque el resultado del cambio se guarda en tiemposcas.txt y en la siguiente linea vuelves a comprobar tiempo.txt con lo que el cambio anterior no está hecho. Haz una copia del archivo en cada instruccion sed, o juega con dos ficheros.

#!/bin/bash
sed.exe -e "s/Monday/Lunes/" TIEMPO.txt >TIEMPOSCAS.txt
cp TIEMPOSCAS.txt TIEMPO.txt
sed.exe -e "s/Thuesday/Martes/" TIEMPO.txt >TIEMPOSCAS.txt
...

o bien cambiando los 2 archivos.

#!/bin/bash
sed.exe -e "s/Monday/Lunes/" TIEMPO.txt >TIEMPOSCAS.txt
sed.exe -e "s/Thuesday/Martes/" TIEMPOSCAS.txt >TIEMPO.txt
sed.exe -e "s/Wednesday/Miercoles/" TIEMPO.txt >TIEMPOSCAS.txt
....

SuSE 13.2 + Kernel 3.16

miguel088

Muchísimas gracias a los dos, parece que funciona casi bien  ;-)

Solo me queda una ultima cuestión, en el caso de que quiera traducir al contrario o a otro idioma desde el castellano, como el Miércoles y el Sábado tienen tildes no me coge el cambio:

Ejemplo:

sed.exe -e "s/Miércoles/mercredi/" TIEMPOCAS.txt >TIEMPOFRANCES.txt

En este caso, me cambia el resto de días, pero los que llevan tilde no me los reemplaza, sabéis por que puede ocurrir?

Muchísimas gracias a todos de verdad.

Un saludo!

mad_soft

En este foro dicen que no es problema del sed, sino de que las locales de tu sistema son unas y el archivo esta creado en otro locale....
http://www.ubuntu-es.org/node/159621#.Un4yesPsHtc

SuSE 13.2 + Kernel 3.16

miguel088

Efectivamente, lo datos de origen que me pasan por FTP están formato UTF y para el software final necesita que los datos este en formato ANSI y antes de llegar a la traducción tengo otro bat creado que transforma todos los txt de utf a ansi.

El problema es que el txt a traducir esta si o si en ansi.

No se podría realizar la traducción de las tildes con el formato ANSI?

Perdonar por mi ignorancia, que en estos campos me pierdo bastante..

Gracias de antemano!

Un saludo.