내 스크립트 출력의 일부에서 tmp로 폴더가 있습니다. 필요하지 않은 부분을 제거하려면 회전 컷이 필요합니다. 배열을 사용하고 있는 스크립트의 일부에 각 줄을 개별적으로 출력하고 싶습니다. ${myarray[0]}에서와 같이 []에 넣으면 첫 번째 줄 2번째 등을 출력하도록 할 수 있습니다. 나에게 정말로 필요한 것은 파일의 각 줄에 대해 이 섹션을 채우는 것입니다.
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>