Bashを使用してリストの重複/交差点を見つける

Bashを使用してリストの重複/交差点を見つける

次の2つの「リスト」があるとしましょう。

#!/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番目のリストの要素が交差する要素を保持する3番目のリストを作成する必要があります。どうすればいいですか?

ベストアンサー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[@]}"

これは、正確な文字列マッチングを使用して2つのリスト間の要素を比較します。

結果:

Intersection:
    6
    7
    8
    bee

おすすめ記事