Saber si una fecha es un domingo

Resuelto
dna.factory Mensajes publicados 19917 Fecha de registro   Estado Moderador Última intervención   -  
dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   -
Bonjour,

Estoy en medio de la realización de un script en unix que programa una serie de tareas (un at en un for).
Eso está bien, logro manejar las fechas, los cambios de día, mes y año.
No hay problema.
Programo una tarea por día, sin importar las condiciones.

Lo que me gustaría hacer (aunque es facultativo) es añadir una tarea adicional si el día es domingo (como el cliente está cerrado, podemos poner más tareas sin problemas).

Así que he hecho mi man date, y encontré el %a que me devuelve el día de la semana.
Genial...
Excepto que no quiero saber qué día es hoy.
Quiero saber qué día será mañana, pasado mañana, etc...
En realidad, quiero saber qué día será el 121125 o el 121215.
¿Hay algún comando simple (en una línea) que me permita obtener eso?
Tengo en variables: $año, $mes, $día, $hora, $minuto (cada uno con dos dígitos, no se trata de la marca de tiempo actual, sino de la que voy a utilizar para mi comando at, en el futuro, por lo tanto)
Atención, estoy en Sco Unix, un viejo sistema cuya última actualización data de 2003, el bash es un poco específico.

Si no hay, o si el comando requiere un scripting complicado, olvídalo, no es vital (a menos que te divierta)

Configuración: Anthill inside
Sco/unix 5.07 /bin/sh

--
¡Deja de fallar en la prueba de Turing!

5 respuestas

  1. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    calculer el día de una fecha con ncal
    $ set 25 12 2012 ; ncal $2 $3 | awk -v d=$1 '{for(n=2; n<=NF;n++)if($n == d){print $1; exit }}' Tu $ set 14 11 2012 ; ncal $2 $3 | awk -v d=$1 '{for(n=2; n<=NF;n++)if($n == d){print $1; exit }}' We $ set 25 12 2012 ; ncal $2 $3 | awk -v d=$1 '{for(n=2; n<=NF;n++)if($n == d){print $1; exit }}' Tu $ set 6 1 2013 ; ncal $2 $3 | awk -v d=$1 '{for(n=2; n<=NF;n++)if($n == d){print $1; exit }}' Su $ 
    1
    1. dna.factory Mensajes publicados 19917 Fecha de registro   Estado Moderador Última intervención   1 621
       
      bajo debian (pero no me sirve, lo necesito en unix):
      root@LECBIARRITZ:/home/sesadm# man ncal
      Reformateando ncal(1), por favor espere...
      root@LECBIARRITZ:/home/sesadm# ncal
      Noviembre 2012
      Lu 5 12 19 26
      Ma 6 13 20 27
      Mi 7 14 21 28
      Ju 1 8 15 22 29
      Vi 2 9 16 23 30
      Sa 3 10 17 24
      Do 4 11 18 25

      En unix:
      # man ncal
      man: ncal no encontrado
      # ncal
      ncal: no encontrado

      Gracias de todos modos, no conocía ncal
      0
  2. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    hola
    ¿conoce la orden date de SCO estas opciones?
    $ date +%a -d tomorrow Tue $ date +%a -d "now+4 days" Fri $ date +%a -d "12/25/2012" Tue 
    0
    1. dna.factory Mensajes publicados 19917 Fecha de registro   Estado Moderador Última intervención   1 621
       
      Para los dos primeros, sé que no es así, es Linux (fue una revolución para nuestros redactores cuando pasamos a Linux)
      para el último, ya no está en el man, así que me parece poco probable.

      # date +%a -d "12/25/2012"
      Uso: date [-u] [+formato]
      date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]
      # date +%a -d 122512
      Uso: date [-u] [+formato]
      date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]
      # date +%a -d "122512"
      Uso: date [-u] [+formato]
      date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]

      Después de verificar, tengo bien ese -d en una Debian (en el man), pero no en SCO Unix.
      Gracias de todos modos.
      0
  3. dna.factory Mensajes publicados 19917 Fecha de registro   Estado Moderador Última intervención   1 621
     
    opciones extravagantes que preferiría evitar.

    almacenar la fecha actual en una variable.
    Modificar la fecha actual durante la ejecución de mi script, para poder utilizar date +%a sobre el now
    restablecer la fecha actual al final del script.
    (técnicamente, eso debería funcionar)

    Opción menos extravagante pero un poco complicada para el valor agregado

    obtengo el dígito del día de la semana en decimal con %u al iniciar el script
    incremento el valor al mismo tiempo que incremento el día del mes. y cuando llego a +6, hago mi caso y lo restablezco a 0/1
    escribiéndolo así, no parece tan terrible, lo guardo en un rincón por falta de algo mejor.
    --
    ¡Deja de fallar en la prueba de Turing!
    0
    1. dna.factory Mensajes publicados 19917 Fecha de registro   Estado Moderador Última intervención   1 621
       
      una otra trampa, para saber qué día de la semana será en n días.
      recupero el número con %u
      aumento n
      y hago un módulo 7

      No es útil en mi caso, ya que estoy iterando incrementando los días de todos modos, y necesito comprobar en cada incremento, así que el método anterior es mejor.
      0
  4. dna.factory Mensajes publicados 19917 Fecha de registro   Estado Moderador Última intervención   1 621
     
    Dubcek: muchas gracias, pero creo que estoy perdido en este caso. Pienso que voy a recurrir a la programación y voy a reinventar la rueda.
    Sin embargo, esto ayuda a los demás, y has respondido ampliamente a la pregunta; no es tu culpa que esté trabajando en un sistema que es del siglo pasado.
    Marcaré como resuelto porque has dado dos buenas respuestas para los demás.
    Si encuentras otras ideas, mándalas siempre, nunca se sabe.

    --
    ¡Deja de fallar en la prueba de Turing!
    0
  5. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    avec cal
    $ set 1 1 2013 ; cal $2 $3 | awk -v d=$1 '/^ / {gsub(""", "xx ")} NR==2 {split($0,a);next} {for(n=1; n<=NF;n++)if($n == d){print a[n]; exit }}' Tu $ 
    0
    1. dna.factory Mensajes publicados 19917 Fecha de registro   Estado Moderador Última intervención   1 621
       
      Digo: "Señor" !!
      Funciona.
      Me has perdido en
      '/^ /'

      Intento entender por mí mismo, y vuelvo a ti si necesito explicaciones.
      0
    2. dna.factory Mensajes publicados 19917 Fecha de registro   Estado Moderador Última intervención   1 621
       
      ok, he entendido globalmente
      la parte split($0,a);next snip print a[n] es un poco confusa, pero entiendo la idea general.
      sigue siendo algo tosco...
      0
    3. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      gsub se utiliza para tener 7 campos en cada línea, para luego usar a[n], siendo n el número del campo y a conteniendo los días:
      $ cal 12 2012| awk '/^ / {gsub(" ", "xx ")} {print}' xx December 2012 Su Mo Tu We Th Fr Sa xx xx xx xx xx xx 1 2 3 4 5 6 7 8 ...
      también podríamos reemplazar gsub por:
      BEGIN{FIELDWIDTHS="3 3 3 3 3 3 3"}
      FIELDWIDTHS es una opción de gawk, desconocida en los viejos awk.
      0