Bash:迭代变量列表

标签 bash loops

我有一个组列表,其中我有人名:

group1="Kyliane Justine Noemie Marion"
group2="Julie Lilou"
group3="Lena Celeste"

等等……

我想检查一个组的人的名字在根据组号命名的文件中出现了多少次(例如:group1.txt)。

所以我有:

for person in $group1
do
number=$(grep -oi "$person" /path/group1.txt | wc -l)
echo $person "wrote" $number "times."
done

很好用。

但是,我想要的是检查每个组文件中的每个组成员,不仅是/path/group1.txt 中的 $group1,还有/path/group2.txt 中的 $group2,等等。 . 我知道我可以复制粘贴我的代码,只需将 group1 更改为 group2、group3 等。但我确信有一种更快的方法,尤其是因为我有 12 个组!我是 bash 的初学者,我不知道该怎么做。

非常感谢您的帮助。

最佳答案

使用数组而不是单独的变量。

groups=("Kyliane Justine Noemie Marion" "Julie Lilou" "Lena Celeste")
i=1
for group in "${groups[@]}"
do 
    for person in $group
    do
        number=$(grep -oi "$person" /path/group$i.txt 2>/dev/null | wc -l)
        echo $person "wrote" $number "times."
    done
    i=$((i+1))
done

作为一般规则,每当您发现自己创建具有顺序名称的变量时,您可能应该使用数组或类似的数据结构。这适用于大多数编程语言。

关于Bash:迭代变量列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53180561/

相关文章:

bash - 在采用所有参数的脚本上运行 nohup 命令

bash - 使用 Bash 从域名列表中过滤 URL 列表

eclipse - 如何更改默认的 eclipse shell 解释器?

javascript - 找出集合中的哪种数字组合总计达到给定的总计?

arrays - 在 Bash 中将文本文件的内容添加到数组中

python - 如何使用 for 循环对一组数据帧运行操作?

Java,输出未显示?

multithreading - 带有 OpenMP 的 OpenGL 总是出现段错误

javascript - 如何在jquery中添加多个输入文本值

java - 如何找出抽象列表中的对象?