Массив Bash и вывод

Массив Bash и вывод

У меня есть папка из части моего скрипта, выводимого в tmp. Rev cut необходим для удаления ненужных частей. Я хочу выводить каждую строку отдельно в часть моего скрипта. Я использую массив, и я могу заставить его выводить первую строку, вторую и т. д., если я помещу это в [], как в ${myarray[0]}. Что мне действительно нужно, так это заполнить этот раздел для каждой строки файла.

Содержимое tmp примерно такое.

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

Вот что у меня есть на данный момент.

#!/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

Вывод выглядит так. и мне нужно, чтобы каждая строка была заполнена последовательно с массивом. Спасибо

<File>20038100</File>

@roaima Спасибо за помощь, я действительно ценю это. Мне следует немного подробнее остановиться, потому что сложная часть не в получении этого вывода, а в использовании его для заполнения другого раздела скрипта. У меня уже есть массив для заполнения раздела для каждого файла в папке, но это просто местоположение, и он достаточно хорошо работает с использованием ls для папки. Это запускает часть скрипта для каждого файла в папке. Моя проблема в том, что мне нужно взять содержимое папки и поместить каждый раздел в 4 разных места для каждого файла в папке. Это заполнение XML-файла, из которого мне нужно запустить пакет. Я ломал голову над этим, и мне нужно сделать это с помощью Bash на данный момент, возможно, в будущем смогу перейти на Python, я надеюсь.

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

В разделе ниже мне нужно разместить каждую строку из tmp в 4 местах моего скрипта для каждой строки в tmp. Это может быть много файлов или всего 1, но мне нужно 4 записи в моем xml для каждой строки в исходной папке.

    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

решение1

Вы можете использовать readarrayи избегать всего цикла ввода

readarray -t myarray <1.txt

Но я думаю, что было бы проще преобразовать файл напрямую

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>

Связанный контент