Bash를 사용하여 목록의 중복/교차점 찾기

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

첫 번째 목록과 두 번째 목록의 요소가 교차하는 요소를 보유하는 세 번째 목록을 만들어야 합니다. 어떻게 해야 하나요?

답변1

연관 배열을 도우미로 사용하여 한 목록의 요소(키)를 추적한 다음 다른 목록의 요소를 빠르게 확인합니다.

#!/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

답변2

어때요?

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

관련 정보