디렉터리의 각 파일 쌍에 대한 결과를 파일에 기록합니다.

디렉터리의 각 파일 쌍에 대한 결과를 파일에 기록합니다.

디렉터리의 각 파일 쌍에 대해 명령을 실행하고 결과를 파일에 쓰고 싶습니다. 결과의 행렬 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.fileresult.file서브셸 내부의 모든 명령으로 생성된 모든 출력을 현재 디렉터리에 있는 파일로 리디렉션합니다 .

이상한 파일 이름으로 테스트되었으며 안전한 것 같습니다.

관련 정보