Red de blogs

TuxUbuntu.com

Compartamos conocimiento

Archive for May, 2008

El shell de Linux nos ofrece la ventaja de usar todos los programas que puedan emplearse desde la linea de comandos. Esta facilidad puede emplearse incluso con el famoso programa mathematica.

Este es un ejemplo. Por supuesto que cualquier programa puede utilizarse, y su implementación en shell tiene la ventaja de poder correrse remotamente y de optimizar la potencia de la maquina, ya que no tiene necesidad de levantar el modo grafico. Se pueden incluso llamar a cualquier paquete.

En una Terminal abrimos el editor de textos pico con el archivo test.csh de la siguiente forma (es decir estamos creando el archivo test.csh):

pico test.csh

Pegamos los siguiente en el editor:

set imput=$argv[1]
set mathnufile="allexp.nb"
cat > ${mathnufile} <<EOF
datain=Import["${imput}","Table"];
FN[x_]:=SetPrecision[x,11];
var=Fit[datain,{1,x},x]
Export["out.eos",var,"Table"]
EOF
MathKernel < ${mathnufile} >> /dev/null
more out.eos
rm -f ${mathnufile} out.eos
exit 0

hacemos Ctr+o para guardar el archivo y en la terminal le cambiamos los permisos al archivo test:

chmod +x test.csh

Generamos un archivo de prueba (lo que no es necesario, ya que se puede tomar de los datos internos). Por ejemplo test.dat, del siguiente modo, escribimos en la Terminal:

pico test.dat

y le insertamos los siguientes valores:

1 2
2 3
3 4
4 5
5 6

de nuevo Ctr+o para guardar y ahora corremos el script escribiendo en la Terminal:

./test.csh test.dat

Aqui la orden ./ quiere decir que el programa se encuentra en este nivel, y no es un programa del sistema. La salido de esta prueba es:

1.0000000000000007 + 0.9999999999999998*x

Es decir, un ajuste lineal.

Este es solo un sensillisimo ejemplo. Por supuesto que toda la potencia de este programa puede utilizarse en codigos más complejos.

Si alguien desea algo en especifico para trabajar el Mathematica en linea de comandos envíen sus comentarios y así podemos crear mas entradas con ejemplos practicos.

May
29

El comando paste

Entrada por TuxUbuntu en Comandos

paste (pegar en español) es un comando de Unix que se utiliza para unir archivos de modo horizontal (de forma paralela uno a otro) de modo que la salida del comando nos da como resultado la unión de todas las lineas horizontales, separadas por un TAB, de cada uno de los archivos que pegamos. Este comando es el equivalente horizontal del comando cat que opera en el plano vertical para dos o mas archivos.

Veamos un ejemplo de como se utiliza este comando. Supongamos que tenemos 3 archivos llamados Nombre, Lugar y Fecha los cuales contienen:

Nombre

Mario
Jorge
Luis
Pedro

Lugar

DF
Buenos Aires
Caracas
Copa Cabana

Fecha

Enero
Diciembre
Agosto
Marzo

Para pegar las columnas de estos tres archivos en uno solo escribimos:

paste Nombre Lugar Fecha > ArchivoFinal

Así el archivo final se vera de la siguiente forma

ArchivoFinal

Mario DF           Enero
Jorge Buenos Aires Diciembre
Luis  Caracas      Agosto
Pedro Copa Cabana  Marzo

Saludos y que les pueda ser útil, dejen sus comentarios.

May
28

El comando sed

Entrada por TuxUbuntu en Comandos

Sed (Stream EDitor) es un editor de flujo, una potente herramienta de tratamiento de texto para el sistema operativo Unix que acepta como entrada un archivo, lo lee y modifica línea a línea mostrando el resultado en pantalla. Sed permite manipular flujos de datos, como por ejemplo cortar líneas, buscar y reemplazar texto y muchas otras cosas. La sintaxis general de la orden sed es:

sed [-n] [-e'script'] [-f archivo] archivo1 archivo2 ...

donde:

  • -n indica que se suprima la salida estándar.
  • -e indica que se ejecute el script que viene a continuación. Si no se emplea la opción -f se puede omitir -e.
  • -f indica que los órdenes se tomarán de un archivo

Ejemplos de uso

Cambia todas las minúsculas a mayúsculas de archivo:

sed '1,$ s/[a-z]/[A-Z]/g' nombrearchivo

Borra la 3ª línea de archivo:

sed '3d' nombrearchivo

Añade una línea con el contenido “Línea insertada” después de cada línea del archivo:

sed 'a\Línea insertada' nombrearchivo

Ordenes usuales de sed

  • a\ Añade al final de la línea.
  • c\ Cambia el contenido del patrón.
  • d Borra las líneas afectadas.
  • g realiza sustituciones generales.
  • i\ Inserta sobre los patrones afectados.
  • p Imprime las líneas afectadas, incluso con la opción-n.
  • q Abandona el proceso cuando se alcanza la línea especificada.
  • r archivo Lee un archivo, añadiendo su contenido a la salida.
  • w archivo Copia la línea en archivo.
  • = Imprime el número de línea.
  • ! orden Aplica la orden si la línea no está seleccionada.

Pero porque decimos que es una PODEROSA herramienta, pongamos un ejemplo mas terrenal. Supongamos que tenemos un archivo de texto ejemplo.txt como el que sigue:

Este es un ejemplo de archivo que queremos arreglar

Este archivo tiene un espacio

entre cada linea que escribimos

y deseamos eliminar estos espacios

Si quisiéramos eliminar los espacios entre lineas, la manera mas tradicional seria abrir el archivo con un editor y eliminar estos espacios en blanco a mano. Pero ¿¿que pasa si lo que tenemos en un archivo con 100 párrafos y sus correspondientes espacios en blanco??, entonces otra solución seria poner la opción reemplazar en el procesador de texto y eliminar esos espacios en blanco, pero el detalle esta en ¿¿que caracter es el que corresponde a un espacio en blanco (para pedirle al editor que lo busque) y cual corresponde a eliminar ese caracter (para pedirle al editor que lo reemplace por el de suprimir)??. Pues bien ese es uno de los inconvenientes de la opción reemplazar de muchos procesadores de texto.

Pero con SED es posible modificar esto que queremos de un plumazo, ¿como? de la siguiente forma, escribimos esto en la linea de comandos:

sed '/ *#/d; /^ *$/d' ejemplo.txt

y la salida del la linea de comandos seria algo asi:

mario@kinichahau:~/Desktop$ sed '/ *#/d; /^ *$/d' ejemplo.txt
Este es un ejemplo de archivo que queremos arreglar
Este archivo tiene un espacio
entre cada linea que escribimos
y deseamos eliminar estos espacios
mario@kinichahau:~/Desktop$

Si lo que deseamos es guardar los cambios que se imprimen en pantalla en un archivo de texto entonces escribimos algo como esto

sed '/ *#/d; /^ *$/d' ejemplo.txt > salida.txt

Esto aun que parece algo sencillo de hacer (quitar los espacios en blanco) en realidad para cualquier procesador de textos comun se complica, intenten resolver este problema de quitar espacios en blanco y se darán cuenta por si solos.

Una referencia donde podrás conocer mas de SED, contiene un manual, AQUI