[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