test-search-words-2.sh
#!/bin/bash
declare -A results=() # Deklarace asociativního pole pro ukládání výsledků globálně
# Funkce pro prohledání slov v textu
search_words() {
local sql_array="$1"
local query="$2"
local words=("${@:3}") # Importuje pole z třetího argumentu volání funkce
# local results=()
sql_array=$(echo "$sql_array" | sed -e 's/^[ \t]*//') # Trim begin of the lines
# Připojení slova s dotazem k poli. 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}')
# PRO AWK JE VELMI SPECIFICKÉ, ŽE PROGRAMÁTOŘI NEPOTŘEBUJÍ ZAPISOVAT PODMÍNKU if, NÝBRŽ ROVNOU ZAPÍŠOU PODMÍNKU PŘED BLOK, bez jakýchkoliv závorek!
# Cyklus for není třeba, protože není třeba procházet sloupce!
#
AWK pouze hledá zda se slovo nachází na začátku řádku.
# result=$(echo "$sql_array" | awk -v word="$word" '{
# if ($0 ~ word) {
# print NR; # Vypíše číslo řádku, pokud se slovo nachází na začátku řádku
# next; # Přejde na další řádek
# }
# }')
# Toto read -p "string" je můj oblíbený způsob ladění bash skriptu
read -p "WORD:$word RESULT:$result searched in sql_array"
if [ -z "$result" ]; then
result=0
fi
results["$word"]="$result" # Uložení výsledku pod klíčem slova
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 je běžné pole
words=("FROM" "LEFT_JOIN" "ON" "WHERE")
# Volání funkce pro prohledání slov
search_words "$sql_array" "SELECT" "${words[@]}"
# Vypsání výsledků
echo "SELECT: ${results[0]}"
# hash před názvem pole celého [@] vrací počet prvků v poli
for ((i=1; i<${#words[@]}+1; i++)); do
echo "${words[i-1]}: ${results[i]}"
done
read -p "stop"
echo "SELECT: ${results["SELECT"]}"
read -p "Press key to continue"
# Vypsání výsledků
for word in "${!results[@]}"; do
echo "$word: ${results[$word]}"
done
for word in "${words[@]}"; do
echo "$word: ${results[$word]}"
done
Žádné komentáře:
Okomentovat