Bash: итерация в списке переменных - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть список групп, в которых у меня есть имена людей:

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

отлично работает.

НО, что я хотел бы, это проверять членов каждой группы в каждом файле группы, не только $ group1 в /path/group1.txt, но также $ group2 в /path/group2.txt и т. Д. Я знаю, что могу скопировать и вставить свой код и просто изменить group1 на group2, group3 и так далее. Но я уверен, что есть более быстрый путь, тем более что у меня 12 групп! Я новичок в Bash, и я не знаю, как это сделать.

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 07 ноября 2018

Использовать массив вместо отдельных переменных.

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

Как правило, всякий раз, когда вы создаете переменные с последовательными именами, вам, вероятно, следует использовать массив или аналогичную структуру данных. Это относится ко всем языкам программирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...