для цикла в папках modifing много txt файл с числом постепенного увеличения

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

В каждом подкаталоге существует тот же .txt файл.

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

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

Я должен увеличить k для всех других подкаталогов с постоянной величиной, давайте назовем его "h", таким образом, в maindirectory/2/file_name.txt k=1+h, в maindirectory/3/file_name.txt k=1+h+h и так далее.

Я видел, как выполнить для цикла в рамках каталогов при помощи 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 в 07:42

1 ответ

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

  • Именами папок являются Целые числа
  • h является константой
  • k должен быть увеличен (h * (папка - 1))

Затем это должно работать:

# 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
ответ дан 2 November 2019 в 21:50

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

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