Добавлять значение в массив, только если его еще нет, используя bash - PullRequest
1 голос
/ 03 февраля 2020

Как я уже сказал название. Я попробовал этот код:

    areasArray=()

    while IFS= read -r line
    do
        areaName="$(awk -F ";" '{print $3}')"
        echo $areaName

        if [[ ! " ${areasArray[@]} " =~ " $areaName " ]]; then
            areasArray+=($areaName)
            echo ${areasArray[*]}
        fi
    done < $reportFile

$reportFile относится к CSV-файлу, который выглядит так:

something;something;US
something;something;US
something;something;UK
something;something;FR
something;something;UK
something;something;FR

И массив будет выглядеть так: US US UK FR UK FR. Но я хочу, чтобы каждая зона добавлялась только в том случае, если ее там еще нет . Так должно выглядеть так: US UK FR. Как я могу это сделать? Спасибо.

1 Ответ

3 голосов
/ 03 февраля 2020

Если вам нужно выполнить поиск, используйте ассоциативный массив, а не индексированный массив. В основном, вы будете использовать ключи связанного массива как набор.

declare -A areasArray

while IFS=";" read _ _ areaName _; do
    if [[ ! -v areasArray[$areaName] ]]; then
        areasArray[$areaName]=
    fi
done < "$reportFile"

Если не существует определенного действия c, которое вы хотите выполнить, только если ключ еще не существует, вы можете пропустить if; areasArray[$areaName]= идемпотент.

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