Найти перекрытие / пересечение списков с bash

Скажем, у меня есть эти два “списка”:

#!/usr/bin/env bash git fetch origin; first_list=( ); second_list=( ); git branch --merged "remotes/origin/dev" | tr -d ' *' | while read branch; do first_list+=( "$branch" ); done git branch --merged HEAD | tr -d ' *' | while read branch; do second_list+=( "$branch" ); done 

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

2 Solutions collect form web for “Найти перекрытие / пересечение списков с bash”

Использование ассоциативного массива в качестве помощника для отслеживания элементов в одном списке (в качестве ключей), а затем быстрая проверка элементов другого списка по следующим параметрам:

 #!/bin/bash list1=( 1 3 5 6 7 8 bumble bee ) list2=( 2 4 4 4 6 7 8 bee beer ) declare -A seen for item in "${list1[@]}"; do seen[$item]=1 done for item in "${list2[@]}"; do if [ -n "${seen[$item]}" ]; then intersection+=( "$item" ) fi done echo 'Intersection:' printf '\t%s\n' "${intersection[@]}" 

При этом используются точные совпадения строк для сравнения элементов между двумя списками.

Результат:

 Intersection: 6 7 8 bee 

Как насчет

 for FN in ${first_list[@]}; do [[ ${second_list[@]} =~ $FN ]] && third_list+=($FN); done 
Interesting Posts

Предотвращение уже запущенного процесса для записи в существующий файл

Скройте вывод bash во время запуска автоматического сценария.

Как включить силовую обратную связь в ядре 2.6.34 – 64 бит?

Пользовательская установка для настраиваемого Debian Distro?

Как вырастить файловую систему для использования нераспределенного пространства в разделе?

Как изменить разрешение после загрузки установочного носителя Arch Linux?

одиночная команда для sed и использование входного значения дважды в различной форме

помочь понять часть awk-программы

как каталоги реализуются в файловой системе UNIX?

Получение rsync для удаления исходных файлов, которые уже существуют в пункте назначения

Параметр awk split char

Как сделать svn искать, если есть обновление раз в минуту, и если есть вызов какого-то скрипта?

Символы Юникода в статусной строке uxterm и dwm

заменить конкретную строку в файле на ansible

Могу ли я указать, что пакет .deb зависит от Java, но не указывает, какую реализацию (например, OpenJDK, IcedTea, Oracle)?

Linux и Unix - лучшая ОС в мире.