для цикла в папках, изменяющих количество текстового файла с добавочным номером

У меня есть основной каталог, в котором есть много подкаталогов, каждый из которых содержит те же файлы других. Они называются только в другом вате и более подробно прогрессивным способом, например / maindirectory / 1 /, / maindirectory / 2 /, maindirectory / 3 / и т. Д.

В каждом подкаталоге это тот же .txt-файл.

В этом .txt-файле есть строка с параметром, который мне нужно изменить для каждого подкаталога с другим значением. Давайте назовем параметр, который мне нужно изменить «k».

В maindirectory / 1 / file_name.txt k = 1, например.

Мне нужно увеличить k для всех остальных -directories с постоянным значением, назовем его «h», поэтому в maindirectory / 2 / file_name.txt k = 1 + h, в maindirectory / 3 / file_name.txt k = 1 + h + h и т. д.

Я видел, как выполнить цикл for внутри каталогов с помощью for d in /maindirectory/*/;do (cd "$d" && some_command); done и как изменить предопределяющую переменную sed -i -e 's/k=1/k=1+h/line_number' ./file_name.txt.

Можно ли объединить эти две командные строки в достичь моей цели? Или вы знаете более умный способ или просто другой, чтобы сделать это? Я ничего не знаю о программировании, если только в среде Matlab не будьте осторожны :) Большое спасибо.

0
задан 19 July 2017 в 17:42

3 ответа

Если я правильно понял:

Имена папок - это целые числа h - константа k должна быть увеличена на (h * (папка - 1))

Тогда это должно работать: [ ! d5]

# 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
1
ответ дан 22 May 2018 в 20:24
  • 1
    Это делает именно то, что мне нужно. Спасибо!!! – Michele B. 19 July 2017 в 18:02

Если я правильно понял:

Имена папок - это целые числа h - константа k должна быть увеличена на (h * (папка - 1))

Тогда это должно работать: [ ! d5] # 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

1
ответ дан 18 July 2018 в 10:02

Если я правильно понял:

Имена папок - это целые числа h - константа k должна быть увеличена на (h * (папка - 1))

Тогда это должно работать: [ ! d5] # 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

1
ответ дан 24 July 2018 в 19:29

Другие вопросы по тегам:

Похожие вопросы: