Cambia un mes de un dígito en un mes de dos dígitos.


1

Tengo este guión:

day=`date +%d`
month=`date +%m`
year=`date +%Y`
lmonth=`expr $month - 1`
if test "$lmonth" = "0"
then lmonth=12
year=`expr $year - 1`
fi

El resultado cuando llamo $lmonth/$year es 9/2012 ¿Cómo puedo hacer que salga? 09/2012?

Cuando el mes es 10, 11 o 12, no quiero que sea 010, 011 o 012 respectivamente.

Quiero poner el año y el mes de $ cuando llamo a una tabla o archivo con el período. Por ejemplo, table_extra201209.

¿Cómo agrego el cero adicional para los meses del 1 (enero) al 9 (septiembre)?

Intento todas las respuestas aquí, pero umm ... Olvidé mencionar algo. Quiero poner $ year y $ lmonth cuando llamo a una tabla o archivo con periode, por ejemplo table_extra201209 cómo ponerlo en eso con "0 "adjuntar antes de" 9 "..? gracias de nuevo :)


1
Necesita menos CAPS, muchas gracias.
Ivo Flipse

Necesita cosas más sensibles cuando las ediciones chocan, también :-(
Joey

Respuestas:


2
$ month=5; year=2012 
$ perl -e 'printf"%02d/%04d\n",@ARGV' $month $year
05/2012

No recuerdo si Bash tiene una función printf o sprintf, probablemente tiene algo equivalente útil.


Si bash hace

$ month=5
$ year=2012
$ printf "%02d/%04d\n" $month $year
05/2012

o, si necesita el resultado en una variable use -v

$ printf -v expiry "%02d/%04d" $month $year
$ echo  $expiry
05/2012

Además, no es necesario invocar date tantas veces

$ d=$(date '+%Y %m %d %H %M %S')
$ a=( $d )
$ echo ${a[0]}
2012
$ echo ${a[1]}
10
$ echo ${a[2]}
30
$ echo ${a[3]}
09
$ echo ${a[4]}
59
$ echo ${a[5]}
31

Finalmente, date por sí mismo a menudo te puede dar lo que quieres

$ minsec=$(date "+%M/%S")
$ echo $minsec
03/27

Probablemente sepa esto, pero si disminuye el mes, tiene permitido 1 - 1 = 12 y disminuye el año y verifica que el número del día esté dentro del rango (no 31 de febrero, no 29 de febrero a menos que sea un año bisiesto, lo que permite cambios de calendario en varias fechas en varios lugares). A menudo es mejor usar un lenguaje de scripting que tenga buenos módulos de manejo de fechas.


1

Podría probar si el número es menor que 10 y solo si ese es el caso, agregue un 0 en frente de eso. Por lo tanto, intente agregar lo siguiente a su script:

[ $lmonth -lt 10 ] && lmonth=0$lmonth
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.