![Bash 배열 및 출력](https://linux55.com/image/197774/Bash%20%EB%B0%B0%EC%97%B4%20%EB%B0%8F%20%EC%B6%9C%EB%A0%A5.png)
스크립트의 일부를 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>