Formatear un número con ceros en shell Unix

Resuelto
tbeghain Mensajes publicados 63 Estado Miembro -  
 eko -
Hola,

Quisiera formatear en shell Unix un número de manera que siempre tenga dos posiciones numéricas. Por ejemplo, 1 se convierte en 01, 2 se convierte en 02, etc...

Por supuesto, puedo hacerlo con un poco de programación, pero ¿es posible hacerlo con un comando simple?

Gracias
Configuración: AIX 5.2

8 respuestas

  1. jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención   4 898
     
    Hola,
    [tmpfs]$ for i in $(seq 10); do printf "%02d\n" "$i"; done 01 02 03 04 05 06 07 08 09 10 
    ;-))

    --
    Z'@+...che.
    JP : Zen, ¡mis Nuggets! ;-) El conocimiento solo es útil si se comparte.
    2
    1. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
       
      Eso ya no es sincronización
      Es un nivel superior, telapatía por ejemplo ;-))
      --
      lami20j
      0
      1. jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención   4 898 > lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención  
         
        Está claro ;-))

        Pero debió haber interferencias, no percibí bien el "20" ;-DDDDD

        --
        Z'@+...che.
        JP : Zen, ¡mis Nuggets! ;-) El saber solo es bueno si se comparte.
        0
  2. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
     
    Hola,

    hay el comando printf
    root@debian:~# for i in $(seq 20);do printf "%02d\n" $i;done 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 

    --
    lami20j
    1
  3. Gotrune Mensajes publicados 55 Fecha de registro   Estado Miembro 3
     

    '0'&$1
    0
  4. tbeghain Mensajes publicados 63 Estado Miembro 3
     
    Muchas gracias, el printf hace exactamente lo que quería.
    0
  5. tbeghain Mensajes publicados 63 Estado Miembro 3
     
    Lo siento, pero tengo un pequeño problema extraño con printf con los números 8 y 9 exclusivamente

    Al ejecutar el siguiente script:
    AA=` printf "%02d\n" "07" `
    echo $AA
    AA=` printf "%02d\n" "08" `
    echo $AA
    AA=` printf "%02d\n" "09" `
    echo $AA
    AA=` printf "%02d\n" "10" `
    echo $AA
    AA=` printf "%02d\n" "7" `
    echo $AA
    AA=` printf "%02d\n" "8" `
    echo $AA
    AA=` printf "%02d\n" "9" `
    echo $AA

    Tengo los siguientes resultados

    07
    printf: 08 not completely converted
    00
    printf: 09 not completely converted
    00
    10
    07
    08
    09

    ¿Por qué el 08 y el 09 no funcionan???? mientras que todos los demás números funcionan???? ¿Es por mi Unix? ¿Quién me ha echado un mal de ojo con el 8 y el 9?
    0
  6. jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención   4 898
     
    Te tranquilizo, bajo GNU/Linux tengo exactamente el mismo problema y no sé por qué.

    He intentado todas las formas de "comillas" de todo tipo (simples, dobles, con, sin, etc.) y ¡nada funciona!

    Incluso sin usar una variable, en línea de comando pura, se bloquea ;-((

    Cualquier solución, pista o inicio de explicación serán bienvenidos.

    Gracias.

    --
    Z'@+...che.
    JP : Zen, mis Nuggets ! ;-) El conocimiento sólo es útil si se comparte.
    0
  7. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
     
    Hola,

    prueba esto
    lami20j@debian:~$ cat ccm.sh #!/bin/bash AA=` printf "%02.f\n" "07" ` echo $AA AA=` printf "%02.f\n" "08" ` echo $AA AA=` printf "%02.f\n" "09" ` echo $AA AA=` printf "%02.f\n" "10" ` echo $AA AA=` printf "%02.f\n" "7" ` echo $AA AA=` printf "%02.f\n" "8" ` echo $AA AA=` printf "%02.f\n" "9" ` echo $AA lami20j@debian:~$ sh ccm.sh 07 08 09 10 07 08 09


    --
    lami20j
    0
    1. jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención   4 898
       
      Especie de matemático ;-))

      Gracias.

      --
      Z'@+...che.
      JP : ¡Zen, mis Nuggets! ;-) El saber solo es bueno si se comparte.
      0
  8. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
     
    Cuando se escribe 01, 02 ... 08, 09, los números se interpretan en octal
    en octal 8 = 10 y 9 = 11

    Un número en octal no puede contener más que los dígitos hasta 7 incluidos
     lami20j@debian:~$ printf "%o et %o et %o\n" 0777 777 521 777 et 1411 et 1011 lami20j@debian:~$ 

    sin embargo, cuando se escriben 8 y 9, son números decimales, por lo que puedo hacer una conversión a octal
    lami20j@debian:~$ printf "%o y %o\n" 8 9 10 y 11

    --
    lami20j
    0
    1. jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención   4 898
       
      Gracias, amigo20j ;-))

      --
      Z'@+...che.
      JP : Zen, ¡mis Nuggets! ;-) El conocimiento solo es bueno si se comparte.
      0
      1. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571 > jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención  
         
        de nada :-))
        --
        lami20j
        0
      2. eko > lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención  
         
        Lo siento, no puedo ayudar con eso.
        0