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