我有一个组列表,其中我有人名:
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/