Вопрос:

Сценарии оболочки, три набора имен, каждая комбинация

bash list shell combinations

48 просмотра

2 ответа

17 Репутация автора

Я пытаюсь написать сценарий оболочки, который принимает три списка имен и подходит к каждой комбинации из списков, и в каждом списке может быть разное количество имен.

Список 1
Майк
Том
Гарри
Стив

Список 2
Дебора
Сара
Дженнифер

Список 3
Алекс
Джо
Келли
Аманда
Уилл
Филипп
Дэвид

Для этого нужно взять Майка из списка 1, а затем Дебору из списка 2, затем перечислить все имена из списка 3. Затем снова Майк из списка 1, Сара из списка 2, затем все имена из списка 3 и т. Д., Пока не будет найдена каждая возможная комбинация. ,

Имея некоторые затруднения с размышлениями о том, как я это сделаю, и любая помощь будет принята с благодарностью.

Автор: nbucko Источник Размещён: 08.11.2017 11:18

Ответы (2)


2 плюса

6846 Репутация автора

Решение

Вы можете использовать для цикла. Пусть f1, f2 и f3 - файлы, содержащие три списка. Затем:

for a in `cat f1`;do
 for b in `cat f2`;do
  for c in `cat f3`;do
   echo $a $b $c;
  done;
 done;
done

Например:

$ cat f1
red
green
cat

$ cat f2
rice
bread
cat f

$ cat f3
tomato
onion


$ for a in `cat f1`;do for b in `cat f2`;do for c in `cat f3`;do echo $a $b $c; done; done; done
red rice tomato
red rice onion
red bread tomato
red bread onion
green rice tomato
green rice onion
green bread tomato
Автор: axiom Размещён: 08.11.2017 11:38

1 плюс

49106 Репутация автора

В зависимости от того, как вы list xсохранили, вы можете просто использовать расширение скобки, чтобы переставить все три списка вместе, например:

printf "%s\n" {Mike,Tom,Harry,Steve}\
{Deborah,Sarah,Jennifer}\
{Alex,Joe,Kelly,Amanda,Will,Phillip,David}

Пример использования / Вывод

$ bash brexpperm.sh
MikeDeborahAlex
MikeDeborahJoe
MikeDeborahKelly
MikeDeborahAmanda
MikeDeborahWill
MikeDeborahPhillip
MikeDeborahDavid
MikeSarahAlex
MikeSarahJoe
MikeSarahKelly
MikeSarahAmanda
MikeSarahWill
MikeSarahPhillip
MikeSarahDavid
MikeJenniferAlex
MikeJenniferJoe
MikeJenniferKelly
MikeJenniferAmanda
MikeJenniferWill
MikeJenniferPhillip
MikeJenniferDavid
TomDeborahAlex
TomDeborahJoe
TomDeborahKelly
TomDeborahAmanda
TomDeborahWill
TomDeborahPhillip
TomDeborahDavid
TomSarahAlex
TomSarahJoe
TomSarahKelly
TomSarahAmanda
TomSarahWill
TomSarahPhillip
TomSarahDavid
TomJenniferAlex
TomJenniferJoe
TomJenniferKelly
TomJenniferAmanda
TomJenniferWill
TomJenniferPhillip
TomJenniferDavid
HarryDeborahAlex
HarryDeborahJoe
HarryDeborahKelly
HarryDeborahAmanda
HarryDeborahWill
HarryDeborahPhillip
HarryDeborahDavid
HarrySarahAlex
HarrySarahJoe
HarrySarahKelly
HarrySarahAmanda
HarrySarahWill
HarrySarahPhillip
HarrySarahDavid
HarryJenniferAlex
HarryJenniferJoe
HarryJenniferKelly
HarryJenniferAmanda
HarryJenniferWill
HarryJenniferPhillip
HarryJenniferDavid
SteveDeborahAlex
SteveDeborahJoe
SteveDeborahKelly
SteveDeborahAmanda
SteveDeborahWill
SteveDeborahPhillip
SteveDeborahDavid
SteveSarahAlex
SteveSarahJoe
SteveSarahKelly
SteveSarahAmanda
SteveSarahWill
SteveSarahPhillip
SteveSarahDavid
SteveJenniferAlex
SteveJenniferJoe
SteveJenniferKelly
SteveJenniferAmanda
SteveJenniferWill
SteveJenniferPhillip
SteveJenniferDavid

Или, если вам нужен пробел, вы можете просто добавить его в расширение:

printf "%s\n" {'Mike ','Tom ','Harry ','Steve '}\
{'Deborah ','Sarah ','Jennifer '}\
{Alex,Joe,Kelly,Amanda,Will,Phillip,David}

Пример использования / Вывод

$ bash brexpperm.sh
Mike Deborah Alex
Mike Deborah Joe
Mike Deborah Kelly
Mike Deborah Amanda
...
Steve Jennifer Amanda
Steve Jennifer Will
Steve Jennifer Phillip
Steve Jennifer David

Если у вас нет контроля над списками в самом скрипте, то решение цикла работает нормально.

Автор: David C. Rankin Размещён: 09.11.2017 12:19
Вопросы из категории :
32x32