2013-03-28 2 views
0

У меня есть массив ${myarr[@]} со строками. ${myarr[@]} в основном состоит из строк и каждая строка содержит слова.Как подсчитать элементы в массиве BASH?

world hello moon 
weather dog tree 
hello green plastic 

В этом массиве должно быть указано число hello. Как мне это сделать?

+0

'Grep -c' может работать – fedorqui

+0

Если являются множественными «приветствиями» на 1 строке, grep -c будет считать это как 1 вхождение. – Tom

ответ

2

Попробуйте это:

for word in ${myarr[*]}; do 
    echo $word 
done | grep -c "hello" 
3

Альтернатива (без петли):

grep -o hello <<< ${myarr[*]} | wc -l 
+0

Спасибо, очень приятно и чистое решение – zhihong

2

Нет необходимости для внешней программы:

count=0 
for word in ${myarr[*]}; do 
    if [[ $word =~ hello ]]; then 
     ((count++)) 
    fi 
done 

echo $count 
+1

LOL, Это тоже сработает ... :-) У каждого свои предпочтения. Некоторые люди жалуются, что чистые сценарии bash медленнее, чем чистые awk. Иногда нам нравится чистое решение bash для совместимости. :-) – anishsane

Смежные вопросы