Foros del Web » Administración de Sistemas » Unix / Linux »

Script cuya misión sea crear un fichero nuevo de texto

Estas en el tema de Script cuya misión sea crear un fichero nuevo de texto en el foro de Unix / Linux en Foros del Web. Trabajo en Ubuntu 11.10 en c-shell. Necesito hacer correr un programa que lo que haga sea crear un nuevo fichero de texto cuyo contenido sea ...
  #1 (permalink)  
Antiguo 19/03/2012, 02:42
 
Fecha de Ingreso: marzo-2012
Mensajes: 2
Antigüedad: 12 años, 8 meses
Puntos: 0
Script cuya misión sea crear un fichero nuevo de texto

Trabajo en Ubuntu 11.10 en c-shell.

Necesito hacer correr un programa que lo que haga sea crear un nuevo fichero de texto cuyo contenido sea la palabra "read" seguido del "nombre textual" del primer fichero que exista en ese momento en otro directorio...

Me explico con un ejemplo:
- Por un lado tengo el directorio $DIR/3211e que contiene en ese momento los siguientes ficheros:

20120317_1200e.sac 20120317_1300e.sac 20120317_1400e.sac 20120317_1500e.sac

el formato de estos ficheros como veis es año/mes/dia_hora00.sac y van siendo creados y añadidos a este directorio cada hora, por lo que está en constante actualización.

- Lo que necesito hacer es programar una rutina que lo que haga sea crear un fichero de texto nuevo, cuyo contenido de texto ordenado en filas en este caso sea el siguiente:

read 20120317_1200e.sac
read more 20120317_1300e.sac
read more 20120317_1400e.sac
read more 20120317_1500e.sac


siendo 20120317_1200e.sac el nombre del primer fichero...y así sucesivamente con todos los ficheros de la lista que existan en ese momento.

Soy un principiante y no se cómo programar ésto. Por favor alguna sugerencia??

Muchas gracias.
  #2 (permalink)  
Antiguo 23/03/2012, 19:35
 
Fecha de Ingreso: julio-2009
Ubicación: La Plata
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 8
Respuesta: Script cuya misión sea crear un fichero nuevo de texto

Mirà, te voy a dar una mala soluciòn con lo poco que se de bash pero capaz sirva de incapiè para ir haciendo un script.

Código:
#!/bin/bash
lsDir=$(ls ./*.sac) //Cambià ./ por la ruta al directorio contenedor de los ficheros

cont=1
posSigEsp=1
if [ -f "fichero" ];then   /Fichero es el nombre del archivo al que le quieras poner los read XXX.
rm fichero
fi
while [[ $posSigEsp > 0 ]]
do
        strAct=$(expr substr "$lsDir" $cont ${#lsDir})
        posSigEsp=$(expr index "$strAct" "
")
        archAct=$(expr substr "$strAct" 1 $posSigEsp)
        if [ -f "$archAct" ];then
                echo "read $archAct">>fichero         //Fichero es el nombre del archivo al que le quieras poner los read XXX.
        fi
cont=$[$cont+$posSigEsp]
done
sleep 1h ;./nembrequelehallaspuestoalejecutable.sh
Este script es medio sucio por dos cosas:
El comando ls lo manipulo como cadena y lo voy desarmando por cada salto de lìnea, que por sierto lo deberìa referenciar por su correspondiente caràcter de escape (en JS serìa /n). Creo que alguien que estè lùcido en bash encontrarìa una forma màs limpia de separar los nombres de ficheros o averiguarlos sin ls.

Otra cosa es que las tareas programadas (me parece) que se hacen con cron y mi ejecutable se llama a si mismo con la lìnea sleep 1h.

Salu2, espero te sirva.
  #3 (permalink)  
Antiguo 23/03/2012, 22:27
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 10 meses
Puntos: 57
Respuesta: Script cuya misión sea crear un fichero nuevo de texto

Creo que seria tan facil como hacer un ls y usar un for para recorrer los archivos

Código Bash:
Ver original
  1. for archivo in `ls -t`
  2. do
  3.     echo read more $archivo >> archivoSalida.txt
  4. done

Creo que ls -t los ordena por fecha. Si no te sirve, cambialo por ls -tr para ordenarlos en forma inversa.

El for escribe read more mas el archivo en todos los archivos, incluyendo el primero. Nada mas te dejo de tarea que modifiques el for para que no incluya read more en el primer archivo
  #4 (permalink)  
Antiguo 24/03/2012, 17:24
 
Fecha de Ingreso: julio-2009
Ubicación: La Plata
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 8
Respuesta: Script cuya misión sea crear un fichero nuevo de texto

posman...¿entonces ls se puede tratar como un array?
Otra cosa: ¿como hacés esos carácteres que encierran al ls -t?
Prové tu script y funcionó de 10, lo único que como no supe como hacer esos carácteres usé $(ls -t).
Salu2 y perdón si tendría que haber echo otro hilo para éstas dos preguntas.Si es así indicarmelo que no va a pasar de nuevo.
  #5 (permalink)  
Antiguo 24/03/2012, 18:26
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 10 meses
Puntos: 57
Respuesta: Script cuya misión sea crear un fichero nuevo de texto

Creo que el caracter ` hace exactamente lo mismo que el signo $ solamente que es mas viejo. Quiero decir que se utiliza solamente por compatibilidad con versiones anteriores de bash. En realidad creo que se deberia utilizar el signo $.
El caracter ` lo tengo en mi teclado. Es un teclado en español. Ese caracter esta 2 teclas a la derecha de la letra ñ. En la misma tecla tengo los caracteres ` , ] y }

Si has utilizado el signo $ entonces sabes que eso va a regresar la salida del comando que esta entre parentesis. No recuerdo bien, pero creo que el for separa lo que se obtenga del comando que se ejecuta, y utiliza caracteres de separacion como espacio, tabulacion, saltos de linea.

Puedes hacer algo como esto
Código Bash:
Ver original
  1. for texto in `echo a b c`
  2. do
  3.     echo El texto es '$texto'
  4. done

Última edición por posman; 24/03/2012 a las 18:32
  #6 (permalink)  
Antiguo 26/03/2012, 09:18
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Script cuya misión sea crear un fichero nuevo de texto

Todas las shells que son compatibles con POSIX soportan tanto los "backticks" (`) como $().
Solamente la Bourne Shell (sh, no bash) no es compatible con $()

"Compatibilidad con versiones anteriores de bash", pues no, en cualquier caso compatibilidad con otras shells, que aquí hablamos de todos los UNIX y no solamente de Linux, y en Solaris la shell predeterminada es sh ;)

Los elementos de la lista que se le envía a for se separan por lo que esté en la variable IFS (Input Field Separator), que por lo general es espacios. ¡Eso hace que para archivos a veces hay que tener cuidado si hay espacios en sus nombres!

Ejemplo:

Código SH:
Ver original
  1. for letra in a b c d e f; do
  2.     echo $letra
  3. done

Si no tuvieses el requisito de ordenar por tiempo, esto bastaría:

Código SH:
Ver original
  1. for archivo in *; do
  2.     echo read more $archivo;
  3. done


Saludos.

Etiquetas: fichero, programa, ubuntu
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:02.