bash para variável de loop não está mudando

1

Estou interagindo com os índices usados para criar IDs de arquivo de dados. Quando eu crio o nome do arquivo (data_file) e o echo, ele é impresso corretamente, mas quando tento seduzir essa variável nos arquivos desejados, ele apenas coloca o primeiro índice.

# 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

A saída é a seguinte

"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

Portanto, mesmo que seja exibido o arquivo de dados correto, tanto o python quanto o c recebem apenas data_file1.txt

    
por YouDontWantToKnow 01.07.2016 / 06:08

1 resposta

0

Você está produzindo o student_t_sampler_copy.c do modelo student_t_sampler.c no início do script e fora do loop que atualiza a cópia, portanto, você só está atualizando a cópia na primeira iteração do loop, e todos das outras iterações não há mais nada a mudar. Você tem que copiar o arquivo dentro do loop (imediatamente após o for ).

    
por 01.07.2016 / 10:04

Tags