[DUDA - BASH SCRIPT] Como opero con numeros sin perder el cero mudo?

tenemos "palabra"
pero "palabra" ya existe.
asi que queremos "palab01"
pero en su lugar sale "palab1"
como puedo operar sin perder ese cero?

pongamos el siguiente script:

      local palabras="palabra"
      local sufix=00
      aux=$(echo "$palabras" | awk '
        {
          split($0, chars, "")
          for (i=1; i <= 5; i++) {
            printf("%s", chars[i])
          }
        }')
      sufix=$((sufix+1))
      palabras=$(echo $aux$sufix)



El codigo pretende mirar en un fichero-lista, y si la palabra ya existe crea una nueva con las 5 primeras letras y añade dos numeros.
  local palabras="palabra"
  local exists='1'
  local sufix=00
  until [ $exists -eq '0' ]; do
    if [ $palabras = $(cat fichero | grep $palabras | awk '{split ($0, n, ":"); print n[1]}') ]; then
      aux=$(echo "$palabras" | awk '
        {
          split($0, chars, "")
          for (i=1; i <= 5; i++) {
            printf("%s", chars[i])
          }
        }')
      sufix=$((sufix+1))
      palabras=$(echo $aux$sufix)

      exists='1'
    else exists='0'
    fi
  done
Prueba a usar %02d en el printf.
JanKusanagi escribió:Prueba a usar %02d en el printf.


Por ahi iban los tiros al final ha funcionado cambiando

palabras=$(echo $aux$sufix)


por

palabras=$(echo $aux$(printf %02d $sufix))


Muchas gracias!!
alohl669 escribió:tenemos "palabra"
pero "palabra" ya existe.
asi que queremos "palab01"
pero en su lugar sale "palab1"
como puedo operar sin perder ese cero?

pongamos el siguiente script:

      local palabras="palabra"
      local sufix=00
      aux=$(echo "$palabras" | awk '
        {
          split($0, chars, "")
          for (i=1; i <= 5; i++) {
            printf("%s", chars[i])
          }
        }')
      sufix=$((sufix+1))
      palabras=$(echo $aux$sufix)



El codigo pretende mirar en un fichero-lista, y si la palabra ya existe crea una nueva con las 5 primeras letras y añade dos numeros.
  local palabras="palabra"
  local exists='1'
  local sufix=00
  until [ $exists -eq '0' ]; do
    if [ $palabras = $(cat fichero | grep $palabras | awk '{split ($0, n, ":"); print n[1]}') ]; then
      aux=$(echo "$palabras" | awk '
        {
          split($0, chars, "")
          for (i=1; i <= 5; i++) {
            printf("%s", chars[i])
          }
        }')
      sufix=$((sufix+1))
      palabras=$(echo $aux$sufix)

      exists='1'
    else exists='0'
    fi
  done

Hola, no sé si lo quieres hacer con AWK por alguna razón en concreto, pero con cut puedes cortar por caracteres simplificando parte del código que tienes.

Un saludo.
KePeRHeLL escribió:
alohl669 escribió:tenemos "palabra"
pero "palabra" ya existe.
asi que queremos "palab01"
pero en su lugar sale "palab1"
como puedo operar sin perder ese cero?

pongamos el siguiente script:

      local palabras="palabra"
      local sufix=00
      aux=$(echo "$palabras" | awk '
        {
          split($0, chars, "")
          for (i=1; i <= 5; i++) {
            printf("%s", chars[i])
          }
        }')
      sufix=$((sufix+1))
      palabras=$(echo $aux$sufix)



El codigo pretende mirar en un fichero-lista, y si la palabra ya existe crea una nueva con las 5 primeras letras y añade dos numeros.
  local palabras="palabra"
  local exists='1'
  local sufix=00
  until [ $exists -eq '0' ]; do
    if [ $palabras = $(cat fichero | grep $palabras | awk '{split ($0, n, ":"); print n[1]}') ]; then
      aux=$(echo "$palabras" | awk '
        {
          split($0, chars, "")
          for (i=1; i <= 5; i++) {
            printf("%s", chars[i])
          }
        }')
      sufix=$((sufix+1))
      palabras=$(echo $aux$sufix)

      exists='1'
    else exists='0'
    fi
  done

Hola, no sé si lo quieres hacer con AWK por alguna razón en concreto, pero con cut puedes cortar por caracteres simplificando parte del código que tienes.

Un saludo.

Soy todo oídos. Básicamente llevo trasteando en bash script un par de semanas y no lograba una buena pista para operaciones con strings y buscando encontre awk(que ojo,no parece tampoco moco de pavo). cut, correcto? voy a echarle un ojo.
4 respuestas