디렉터리의 각 파일 쌍에 대해 명령을 실행하고 결과를 파일에 쓰고 싶습니다. 결과의 행렬 NxN을 얻고 싶습니다. 나는 시작했다:
for file1 in some_directory/*.txt;
do
filename1=$(basename "$file1")
for file2 in some_directory/*.txt;
do
//here python script should be run
python script.py file1 file2
//and result should be written to file, seperate by space
done
//here should be new line
done
안타깝게도 저는 bash를 모릅니다. 내가 끝내도록 도와줄 사람이 있나요? 미리 감사드립니다
답변1
이것을 시도해 보십시오:
#!/bin/bash --
(cd some_directory ;\
for file1 in *.txt ; do
for file2 in *.txt ; do
# here python script should be run
printf "%s " "$(python /path/to/script.py "${file1}" "${file2}")"
done
printf "\n"
done ) > result.file
메모: 스크립트 /path/to/script.py
의 전체 경로 이름으로 바꿔야 합니다 .script.py
전체 블록은 에 포함됩니다 (...)
. 내부의 모든 명령은 하위 쉘에서 실행됩니다. 이는 명령이 some_directory
포함된 첫 번째 줄 덕분에 출력을 그룹화 및 캡처하고 모든 명령이 에서 실행되도록 하는 데 사용됩니다 cd
.
"${file1}"
"${file2}"
이러한 변수의 값을 안전하게 참조하는 데 사용됩니다 .
"$( ... )"
내부에서 명령을 실행하고 큰따옴표 덕분에 출력을 단일 문자열로 그룹화합니다.
printf "%s " "$( ... )"
python
추가 공백을 사용하여 스크립트 결과를 인쇄합니다 .
printf "\n"
새로운 줄을 인쇄합니다.
> result.file
result.file
서브셸 내부의 모든 명령으로 생성된 모든 출력을 현재 디렉터리에 있는 파일로 리디렉션합니다 .
이상한 파일 이름으로 테스트되었으며 안전한 것 같습니다.