Bash example using sed, awk: přístup ke členům asociativního pole

Vysvětlení a komentáře jsou součástí předchozího článku.

Projekty_www/phpBB3-docs/test-search-wrods3.sh

 

#!/bin/bash
declare -A results=()  # Deklarace asociativního pole pro ukládání výsledků

# Funkce pro prohledání slov v textu
search_words() {
    local sql_array="$1"
    local query="$2"
    local words=("${@:3}")

    sql_array=$(echo "$sql_array" | sed -e 's/^[ \t]*//') # Trim begin of the lines

    # Vytvoření pole slov s query na prvním místě
    local all_words=("$query" "${words[@]}")
    # Procházení slov a hledání jejich výskytu v stringu
    for word in "${all_words[@]}"; do
        result=$(echo "$sql_array" | awk -v word="$word" '$0 ~ word {print NR; exit}')
read -p "WORD:$word RESULT:$result searched in sql_array"
        # Pokud není nalezen žádný výskyt, nastavíme výsledek na 0
        if [ -z "$result" ]; then
            result=0
        fi

        # Uložení výsledku pod klíčem slova
        results["$word"]="$result"
    done

    # Vrácení asociativního pole výsledků
 #    echo "${results[@]}"
}

# Hlavní kód
clear
sql_array="
    'SELECT'    => 'f.*',
    'FROM'      => array(
        FORUMS_TABLE        => 'f'
    ),
    'LEFT_JOIN' => array(),
    'ORDER_BY'  => 'f.left_id',
    'WHERE'     => 'f.id = 1'
"

# Pole se slovy, která hledáme
words=("FROM" "LEFT_JOIN" "ON" "WHERE")

# Volání funkce pro prohledání slov
search_words "$sql_array" "SELECT" "${words[@]}"

# Vypsání výsledků
for word in "${!results[@]}"; do
    echo "WORD:$word RESULT:${results[$word]} searched in sql_array"
done

# Oddělení pro přehlednost
echo "--------------"

# Vypsání výsledků v očekávaném formátu
echo "SELECT:${results[SELECT]}"
echo "FROM: ${results[FROM]}"
echo "LEFT_JOIN: ${results[LEFT_JOIN]}"
echo "ON: ${results[ON]}"
echo "WHERE: ${results[WHERE]}"

Komentáře

Oblíbené příspěvky