para ciclo em pastas modificando um número de um arquivo txt com um número incremental

0

Eu tenho um diretório principal no qual existem muitos subdiretórios, cada um contendo os mesmos arquivos dos outros. Eles são nomeados apenas em um wat diferente e mais em profundidade de forma progressiva, como / maindirectory / 1 /, / maindirectory / 2 /, maindirectory / 3 /, etc.

Em cada subdiretório existe o mesmo arquivo .txt.

Neste arquivo .txt, há uma linha com um parâmetro que preciso modificar para cada subdiretório com um valor diferente. Vamos chamar o parâmetro que eu preciso modificar "k".

No maindirectory / 1 / file_name.txt k = 1 por exemplo.

Eu preciso incrementar k para todos os outros subdiretórios com um valor constante, vamos chamá-lo de "h", então no maindirectory / 2 / file_name.txt k = 1 + h, no maindirectory / 3 / file_name.txt k = 1 + h + h e assim por diante.

Já vi como executar um ciclo dentro de diretórios usando for d in /maindirectory/*/;do (cd "$d" && some_command); done e como modificar uma variável predefinida sed -i -e 's/k=1/k=1+h/line_number' ./file_name.txt .

É possível combinar essas duas linhas de comando para atingir meu objetivo? Ou você conhece uma maneira mais inteligente ou apenas diferente para fazer isso? Eu não sei nada sobre programação a menos que em um ambiente Matlab seja gentil por favor :) Muito obrigado.

    
por Michele B. 19.07.2017 / 16:24

1 resposta

1

Se eu entendi corretamente:

  • Nomes de pastas são inteiros
  • h é uma constante
  • k deve ser aumentado por (h * (pasta - 1))

Então, isso deve funcionar:

# Set constant variable h
h=1

cd /maindirectory/

# Loop directories
for d in *; do

    # open subshell
    (
    cd $d;

    # Get current value of k
    k=$(grep -Po "(?<=k\=)[0-9]+" file_name.txt);

    # Calculate new value of k
    new_k=$(bc<<<"$k+$h*($d-1)");

    # Update text file with new value of k
    sed -i -e "s/k=$k/k=$new_k/" file_name.txt;

    # Close subshell
    )
done
    
por RoVo 19.07.2017 / 16:41