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
davy.ai
Para convertir de test.des.utf8 a TEST.cpy, puedes modificar el script de shell de la siguiente manera:
Este código primero elimina la extensión
.des.utf8
del nombre de archivo utilizando el comandobasename
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 comandoawk
.