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

Crear script para versionar dos archivos en UNIX

Estas en el tema de Crear script para versionar dos archivos en UNIX en el foro de Unix / Linux en Foros del Web. Tengo dos tipos de ficheros unos dato_0001.dat, dato_0002.dat, dato_0003.dat, dato_0004.dat y otros dato_0001.ctl, dato_0002.ctl, dato_0003.ctl, dato_0004.ctl. De los cuales mediante un procedimiento creo el fichero ...
  #1 (permalink)  
Antiguo 24/03/2015, 14:42
 
Fecha de Ingreso: marzo-2015
Mensajes: 1
Antigüedad: 9 años, 9 meses
Puntos: 0
Crear script para versionar dos archivos en UNIX

Tengo dos tipos de ficheros unos dato_0001.dat, dato_0002.dat, dato_0003.dat, dato_0004.dat y otros dato_0001.ctl, dato_0002.ctl, dato_0003.ctl, dato_0004.ctl.
De los cuales mediante un procedimiento creo el fichero dato.dat.
Lo que necesito es un contador de dato_*.ctl existentes que se aumente 1.
luego modificar dato.dat a dato_0005.dat y crear un fichero dato_0005.ctl.

solo he intentado usando ls dato_*.ctl | wc -l > var
sed 's/ //g' var >var2
obtendría el numero de ficheros existentes
pero me quedo estancado ahí. no me funciona el resto.
  #2 (permalink)  
Antiguo 26/03/2015, 12:17
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Crear script para versionar dos archivos en UNIX

Para saber cuántos archivos cuyo nombre empieza con "dato_" y termina con ".dat":
ls -1 dato_*.dat | wc -l

No es a prueba de fallas, ya que el salto de línea es un caracter válido para un nombre de archivo en UNIX, y además necesitás manejar correctamente el caso donde no hay archivos que coincidan, pero en el 99% de los casos funciona.

Ahora, lo "lindo" de tu caso es que por la forma en la que los estás nombrando, el archivo cuyo nombre contenga al número más grande será también el primero de la lista de "ls -1r" o el último de "ls -1", con lo cual es fácilmente identificable.

El número lo podés obtener simplemente con sustitución de cadenas de bash. Creo que con lo siguiente deberías poder solucionar el problema :)
Código BASH:
Ver original
  1. ARCHIVO=$(ls -1 dato*.dat | tail -1)
  2. NUM_ARCHIVO=${ARCHIVO//[a-z_.]/}
  3. SIGUIENTE_ARCHIVO=$(( NUM_ARCHIVO + 1 ))

Saludos.

Etiquetas: unix
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 20:40.