我有一个从脚本输出的一部分到 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>