[Linuxcantabria] txt a ASCII, uso de 'col', renombrar ficheros y máximo de una col de datos numéricos.
Mario Brambilla Rueda
marbram en ono.com
Vie Ago 10 16:56:31 CEST 2007
Cuentan que, el 09 de Aug de 2007, Luque Rodríguez dijo:
> Hola:
Hola.
> tengo unos problemillas con la codificación de los textos de unos scripts
> que he escrito usando el bloc de notas de windows (ya ya lo se, no digais
> nada). El caso es que quiero saber si existe una forma cómoda para pasar un
> txt a ASCII. He leído sobre la orden 'col' pero no me hace ni ... caso.
No esta claro lo que quieres decir. Yo he tenido que convertir texto
de iso-8895-15 a formato utf-8. Lo tengo para un fichero concreto con
el siguiente guion. El programa "iconv" esta en el paquete "libc6"
#!/bin/sh
function continuarsn {
#--- Preguntar si continuar y terminar en caso contrario.
if [ -n "$1" ] ; then
echo -e "\n\n$1"
fi
REPLY=" "
while [[ "$REPLY" != "s" \
&& "$REPLY" != "S" \
&& "$REPLY" != "n" \
&& "$REPLY" != "N" \
]]; do
read -p "¿Continuar? (s/n): "
if [[ "$REPLY" = "n" || "$REPLY" = "N" ]]; then
exit 0
fi
done
}
###############################################################################
if [ -z "$1" ]; then
echo "Falta el nombre del fichero."
help
exit -1
fi
extf=$(date "+%F.%T")
codtxt="iso-8859-15"
if [ -n "$2" ];then codtxt="$2";fi
iconv -f "$codtxt" -t utf-8 "$1" | less
continuarsn "Si esta conversión es válida, continue."
ftmp="tmp.$extf"
iconv -f "$codtxt" -t utf-8 "$1" -o "$ftmp"
mv -f "$ftmp" "$1"
> Son ficheros de datos, el caso es que después de "tratarlos", cambio la coma
> decimal por punto para hacer los gráficos con gnuplot, les añado una
> extensión: por ejemplo: 'datos1.dat' pasa a ser 'datos1.dat.luq', no es que
> me moleste pero es poco elegante, así que me gustaría que 'datos1.dat'
> después de ser tratado se llamase 'datos1_filtrados.dat' o 'datos1.fil'.
> Tengo que tratar numerosos ficheros, el script debe actuar sobre 'datos1.dat',
> 'datos2.dat', 'datos3.dat' ... etc
> Otro tema: Los ficheros de datos contienen tres columnas numéricas, me
> interesa saber el máximo valor de la primera columna (carga) por ejemplo,
> ¿cómo hago?
Un posible guion seria algo asi.
#!/bin/sh
function fext {
#--- Devuelve en la variable fext la extension del nombre del fichero dado.
fext="."`echo $1|awk -F "." '{print $NF}'`
}
function fnomb {
#--- Devuelve en la variable fnomb el nombre sin extension del nombre del fichero dado.
fnomb=`echo "$1" \
| awk -F. '{ nombre=$1 ; for(var=2 ; \
var<NF ; var=var+1) nombre=nombre "." $var ; print nombre }'`
}
###############################################################################
for fent in *.dat; do
fnomb "$fent"
echo -ne "$fent => maximo columna 1 = "
cut -f 1 -d' ' "$fent" | sort -nr | head -1
# filtrar "$fent" >"$fnomb"_filtrado.dat
echo "Fichero filtrado: $fnomb\_filtrado.dat"
done
> Muchas gracias a todos/as
> Luque
Espero que te sirva para algo.
Más información sobre la lista de distribución Linuxcantabria