Toto je velice základní a primitivní kód, který najde řádky, kde se nachází hledané slovo a vrátí číslo. Problém tohoto kódu je, že grep je volaný ve smyčce, což nemusí být dostatečně efektivní. Proto si v příštím článku ukážeme jak to udělat pomocí funkce a awk kódu.
#!/bin/bash
declare -A results
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=("SELECT" "FROM" "LEFT_JOIN" "ON" "WHERE")
# Inicializace pole výsledků
results=() # globální proměnná results je nastavena na pole
# Procházení slov a hledání jejich výskytu v stringu
for word in "${words[@]}"; do
# Příkaz cut rozdělí daný řádek podle oddělovače -d ":", protože grep extrahuje čísla řádků následované dvojtečkou. Argument -f extrahuje první sloupec, tedy číslo řádku.
result=$(echo "$sql_array" | grep -n -o "'$word'" | cut -d ":" -f 1)
if [ -z "$result" ]; then
result=0
fi
results["$word"]="$result"
read -p "WORD:$word RESULT:$result"
done
# Vypsání výsledků
for word in "${words[@]}"; do
echo "$word: ${results[$word]}"
done
Žádné komentáře:
Okomentovat