我有一個從腳本輸出的一部分到 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>