在文件夹中循环修改带有递增数字的 txt 文件的数字

在文件夹中循环修改带有递增数字的 txt 文件的数字

我有一个主目录,其中有许多子目录,每个子目录都包含其他子目录相同的文件。它们只是以不同的方式命名,并以渐进的方式更深入,例如 /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

相关内容