Bash 数组和输出

Bash 数组和输出

我有一个从脚本输出的一部分到 tmp 的文件夹。转速削减对于去除不需要的部分是必要的。我想将每一行分别输出到我正在使用数组的脚本的一部分,如果我将其放入我的 [] 中(如 ${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 中的每一行放入脚本中 tmp 中每一行的 4 个位置。这可以有很多文件,也可以少至 1 个,但我需要在 xml 中为原始文件夹中的每一行添加 4 个条目。

    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>

相关内容