Matriz bash y salida

Matriz bash y salida

Tengo una carpeta de parte de la salida de mi script a tmp. El corte de revoluciones es necesario para eliminar partes del mismo que no son necesarias. Quiero generar cada línea por separado como parte de mi script. Estoy usando una matriz y puedo hacer que genere la primera línea, segunda, etc. si lo pongo en mi [] como en ${myarray[0]}. Lo que realmente necesito es completar esta sección para cada línea del archivo.

El contenido de tmp es así.

C:\xxxx\DXF FILES\20038100.SLDPRT
C:\xxxx\DXF FILES\20136210.SLDPRT
C:\xxxx\DXF FILES\4_2-1.igs
C:\xxxx\DXF FILES\KC900.igs
C:\xxxx\DXF FILES\MetalSheet_Pusher.step
C:\xxxx\DXF FILES\Sheet Metal Part 8.igs

Esto es lo que tengo hasta ahora.

#!/bin/bash

set -x
cat tmp | rev | cut -d"\\" -f1 | rev | cut -d '.' -f1 > 1.txt
    declare -a myarray
let i=0
while IFS=$'\n' read -r line_data; do
        myarray[i]="${line_data}"
        ((++i))
done < 1.txt
echo "<File>"${myarray[0]}"</File>" > out.txt
rm 1.txt

La salida se ve así. y necesito que cada línea se complete en sucesión con la matriz. Gracias

<File>20038100</File>

@roaima Gracias por la ayuda, realmente lo aprecio. Debería elaborar un poco más porque la parte difícil no es obtener este resultado sino usarlo para completar otra sección del guión. Ya tengo una matriz para completar una sección para cada archivo en la carpeta, pero es solo la ubicación y funciona bastante bien usando ls en la carpeta. Esto ejecuta parte del script para cada archivo de la carpeta. Mi problema es que necesito tomar el contenido de la carpeta y colocar cada sección en 4 lugares diferentes para cada archivo de la carpeta. Está completando un archivo xml desde el que necesito ejecutar un lote. Me he estado rascando la cabeza con esto y necesito hacerlo con Bash por ahora, espero poder usar Python en el futuro.

    while IFS=$',' read -r -a arry;
do
  echo '        <Part>
            <Input>' >> $file_out
  echo '                <File>'${arry[0]}'</File>' >> $file_out

La siguiente sección es donde necesito colocar cada línea de tmp en 4 lugares de mi script para cada línea en tmp. Pueden ser muchos archivos o tan solo 1, pero necesito 4 entradas en mi xml para cada línea de la carpeta original.

    cat tmp | rev | cut -d"\\" -f1 | rev | cut -d '.' -f1 > 1
   declare -a myarray
   let i=0
        while IFS=$'\n' read -r line_data; do
        myarray[i]="${line_data}"
        ((++i))
        done < 1
echo '                  <File>'${myarray[0]}'</File>
                        </NCFile>
                        <Graphics>
                            <Save>true</Save>
                                <Directory>C:\xxxx\OUTPUT\NC FILES</Directory>
                                <File>'${myarray[0]}'</File>
                        </Graphics>
                        <FlatPatternDXF>
                                <Save>true</Save>
                                <Directory>C:\xxxx\OUTPUT\DXF FILES</Directory>
                                <DXFSetting>xxxx</DXFSetting>
                                <File>'${myarray[0]}'</File>
                        </FlatPatternDXF>
                        <xxxxile>
                                <Save>true</Save>
                                <Directory>C:\xxxx\OUTPUT\xxxx FILES</Directory>
                        <File>'${myarray[0]}'</File>
                        </xxxxFile>
                        <ProcessDocumentation>
                            <Save>true</Save>
                                <Directory>C:\xxxx\OUTPUT\PDF FILES</Directory>
                                <File>'${myarray[0]}'</File>
                        </ProcessDocumentation>
                </SaveSettings>
                </Input>' >> $file_out

Respuesta1

Puedes usar readarrayy evitar todo el bucle de entrada.

readarray -t myarray <1.txt

Pero creo que sería más fácil transformar el archivo directamente.

sed -E 's!^.*[\\.]([^.]+)\..*!<File>\1</File>!' tmp >out.txt

cat out.txt
<File>20038100</File>
<File>20136210</File>
<File>4_2-1</File>
<File>KC900</File>
<File>MetalSheet_Pusher</File>
<File>Sheet Metal Part 8</File>

información relacionada