es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambiar el nombre del archivo de salida a mayúsculas sin las extensiones en bash.

En una terminal, navego por varios archivos para reformatearlos, generando una salida con el nombre del archivo y una extensión .cpy.

Por ejemplo, tengo test.des.utf8 que genero como test.des.utf8.cpy, lo que me gustaría hacer es pasar de test.des.utf8 a TEST.cpy.

Intenté algo como esto, pero no funcionó para mí:

"$f" "${f%.txt}.text"

Aquí está mi terminal con la redirección de salida:

for f in $SOURCE_DIRECTORY 
do 
    b=$(basename "$f")
    echo "Generando archivo $f en copia.."; 
    awk -F ';' '
$1=="Tabla" && $3==" " {
  printf "01 %s.\n\n", $2;
  next
}
{
  result = $2
  if ($2 ~ /^Numérico [0-9]+(\.[0-9]+)?$/) {
    nr=split($2,a,"[ .]")
    result = "PIC 9(" a[2] ")"
    if (nr == 3) {
      result = result ".v9(" a[3] ")"
    }    
  }
  sub(/CHAR/,"PIC X", result);
  printf "   * %s.\n\n     05 %s %s.\n\n", $3, $1, result;
}' "$f" > "$TARGET_DIRECTORY/$b.cpy"
done
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para convertir de test.des.utf8 a TEST.cpy, puedes modificar el script de shell de la siguiente manera:

    for f in $SOURCE_DIRECTORY 
    do 
        b=$(basename "$f" .des.utf8)
        b=${b^^}.cpy
        echo "Generando archivo $f en copia.."; 
        awk -F ';' '
        $1=="TABLE" && $3==" " {
          printf "01 %s.\n\n", $2;
          next
        }
        {
          result = $2
          if ($2 ~ /^Numérique [0-9]+(\.[0-9]+)?$/) {
            nr=split($2,a,"[ .]")
            result = "PIC 9(" a[2] ")"
            if (nr == 3) {
              result = result ".v9(" a[3] ")"
            }    
          }
          sub(/CHAR/,"PIC X", result);
          printf "   * %s.\n\n     05 %s %s.\n\n", $3, $1, result;
        }' "$f" > "$TARGET_DIRECTORY/$b"
    done
    

    Este código primero elimina la extensión .des.utf8 del nombre de archivo utilizando el comando basename con el punto como delimitador. Luego utiliza la expansión de parámetros ${b^^} para convertir el nombre de archivo a mayúsculas y agrega la extensión .cpy. Finalmente, elimina la extensión .cpy del nombre de archivo de salida en el comando awk.

Comments are closed.