Сравнение строк входного файла с элементами массива for-l oop - PullRequest
0 голосов
/ 09 апреля 2020

ЦЕЛЬ: сравнить каждую строку («строку») входного файла с ассоциативным массивом, состоящим из строк.

function watchlist ()
{
        declare -A flagged_ip # static arr. holds suspect ipaddr's
        while read -r ipaddr
        do
                for y in "${RA[labl]}" 
                do
                        if [ "$ipaddr" == "$y" ]
                        then
                                # setup arr. to hold all matching ipaddr(s)
                                flagged_ip+=( $ipaddr )
                        fi
                done
        done < "$ipfile"  # txt ipfile composed of designated ip's 
}

ВЫПУСК: В настоящее время выходные данные сравнения из функции пустые. «While-l oop», кажется, работает правильно, но «for-l oop», похоже, неправильно обрабатывает сравнение.

ADDIT. ДЕТАЛИ: Цель функции - взять входной файл (составленный из известных ip-файлов), предоставленный пользователем, и сравнить их с массивом ip-файлов журнала доступа. Наконец, я хотел бы передать каждое совпадение сравнения в массив, а затем распечатать массив, чтобы пользователь мог видеть, какие элементы были удачными совпадениями.

Мои извинения за любой плохой или неформальный английский sh

1 Ответ

0 голосов
/ 09 апреля 2020

Если вы хотите, чтобы l oop прошел через все элементы, замените labl на @

for y in "${RA[@]}"

. Можно также использовать что-то вроде

grep -xf <(printf "%s\n" ${RA[@]}) "$ipfile"

и сохранить это в массиве с

flagged_ip=($(grep -xf <(printf "%s\n" ${RA[@]}) "$ipfile"))
...