单独的文本文件中的计数器

单独的文本文件中的计数器

我有一个基于放置文件夹处理文件的脚本,我创建了一个函数来进行处理,并基于一组变量处理文件夹

funtion filedetect {
//
<some processing code code>
//
}

folder=1
source="/dir_1/"
reciep="[email protected]"
filedetect    

folder=2
source="/dir_2"
reciep="[email protected]"
filedetect

现在我想添加一段代码来创建 1 个文本文件,其中带有一个计数器,该计数器基本上计算每个文件夹中找到和处理的文件数量。这就是为什么我添加了变量“文件夹”,以便文本文件包含类似以下内容的内容:

FOLDER 1 = [count]
FOLDER 2 = [count]
etc.

但为此我需要逐行读取前面的“计数”并将其替换为 count=count+1

如何根据文本文件读取正确的行?

答案1

假设你已经开始这样的事情

folder1=10
folder2=4
folder3=7

您可以使用这样的命令将其写出来

set | grep -E '^folder[0-9]+=' > counter.txt

要再次读回它,您只需获取该文件即可

source counter.txt

bash如果您有一个处理数组 ( , )的 shell,zsh您可以将文件夹集索引为任意大的数字

folder[1]=10
folder[2]=4
folder[3]=7

并将这个变量数组写出

set | grep '^folder=' > counter.txt

使用 读回它source,如上所述。

对于数组,您可以像这样引用它们echo "${folder[1]}"foreach f "${folder[@]}"; do ... done.如果您的索引值严格从 1 升序排列,则甚至可以这样:

i=1
while [[ $i -le ${#folder[*]} ]]
do
    echo "$i => ${folder[$i]}"
    ((i++))
done

答案2

假设您有一个 YAML 格式的文件,例如

folder1: 10
folder2: 20
folder3: 30

您可以使用yq来自https://kislyuk.github.io/yq/n使用以下命令将与文件夹关联的计数加一

yq -i -y --arg n 3 '.["folder"+$n] += 1' counts.txt

或者,使用更具描述性的长选项,

yq --in-place --yaml-output --arg n 3 '.["folder"+$n] += 1' counts.txt

要获取与文件夹关联的当前计数n

yq --arg n 3 '.["folder"+$n]' counts.txt

相关内容