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>

相關內容