У меня есть основной каталог, в котором существует много подкаталогов, каждый содержащий те же файлы других. Их только называют в другом 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 так быть нежным :) Спасибо очень.
Если я понял правильно:
Затем это должно работать:
# 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