데이터 파일 ID를 생성하는 데 사용된 인덱스를 반복하고 있습니다. 파일 이름(data_file)을 생성하고 에코하면 올바르게 인쇄되지만 해당 변수를 원하는 파일에 쓰려고 하면 첫 번째 인덱스만 배치됩니다.
# copy files
cp student_t_sampler.c student_t_sampler_copy.c
cp post_process.py post_process_copy.py
run_mcmc=1
n_samples=1000
n_thin=100
nu=3.
mu=1.
sig=1.
start_data_file=\"data_file
end_data_file=.txt\"
seed=1
alpha=1.
for i in "10. 1" "1. 2" "0.1 3" "0.01 4"; do # i is alpha, num
IFS=' ' read -a myarray <<< "$i"
alpha=${myarray[0]}
num=${myarray[1]}
data_file=$start_data_file$num$end_data_file
echo $data_file
if [ $run_mcmc == 1 ]; then
sed -i "s/nnn/$n_samples/g" student_t_sampler_copy.c # set number of samples, 1000
sed -i "s/ttt/$n_thin/g" student_t_sampler_copy.c # set thinning, 5
sed -i "s/nununu/$nu/g" student_t_sampler_copy.c # set nu
sed -i "s/mumumu/$mu/g" student_t_sampler_copy.c # set mu
sed -i "s/sigsigsig/$sig/g" student_t_sampler_copy.c # set sig
sed -i "s/fff/$data_file/g" student_t_sampler_copy.c # data file
sed -i "s/sss/$seed/g" student_t_sampler_copy.c # set seed
sed -i "s/aaa/$alpha/g" student_t_sampler_copy.c # set alpha
make ./student_t_sampler_copy
./student_t_sampler_copy
fi
n_bins=100
# echo "$data_file"
sed -i "s/fff/$data_file/g" post_process_copy.py # set data file in python
sed -i "s/bbb/$n_bins/g" post_process_copy.py # set number of bins
sed -i "s/aaa/$alpha/g" post_process_copy.py # set set in plot title
sed -i "s/iii/$num/g" post_process_copy.py # set set in plot title
python post_process_copy.py
done
wait # wait for all processes to finish
출력은 다음과 같습니다
"data_file1.txt"
gcc -I/usr/include -L/usr/local/lib student_t_sampler_copy.c -o student_t_sampler_copy -lgsl -lgslcblas -lm
"data_file2.txt"
gcc -I/usr/include -L/usr/local/lib student_t_sampler_copy.c -o student_t_sampler_copy -lgsl -lgslcblas -lm
"data_file3.txt"
gcc -I/usr/include -L/usr/local/lib student_t_sampler_copy.c -o student_t_sampler_copy -lgsl -lgslcblas -lm
"data_file4.txt"
gcc -I/usr/include -L/usr/local/lib student_t_sampler_copy.c -o student_t_sampler_copy -lgsl -lgslcblas -lm
따라서 올바른 데이터 파일을 에코하더라도 Python과 C는 모두 data_file1.txt만 수신합니다.
답변1
student_t_sampler_copy.c
스크립트 시작 부분과 복사본을 업데이트하는 루프 외부에서 템플릿을 생성하므로 student_t_sampler.c
루프의 첫 번째 반복에서만 복사본을 업데이트하고 다른 모든 반복에서는 변경할 필요가 없습니다. 루프 내부(바로 뒤 for
)에 파일을 복사해야 합니다.