我有一个主目录,其中有许多子目录,每个子目录都包含其他子目录相同的文件。它们只是以不同的方式命名,并以渐进的方式更深入,例如 /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 循环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 环境中,否则我对编程一无所知,所以请温柔一点 :) 非常感谢。
答案1
如果我理解正确的话:
- 文件夹名称是整数
- h 是常数
- k 必须增加 (h * (folder - 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