![单独的文本文件中的计数器](https://linux22.com/image/144406/%E5%8D%95%E7%8B%AC%E7%9A%84%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E8%AE%A1%E6%95%B0%E5%99%A8.png)
我有一个基于放置文件夹处理文件的脚本,我创建了一个函数来进行处理,并基于一组变量处理文件夹
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