Procurando por todos os elementos da matriz em outra matriz?

1

É assim que eu procuraria por um elemento em um array.

count=${#ARRAY[@]}

lsearch()
{
  status=-1

  for((i=0;i<count;i++))
  do
     Temp=$1

     if [[ $Temp -eq ${ARRAY[i]} ]]
       then
         status=0
         searches=$((i+1))
         return
     fi
   done
}

Suponha que eu precise procurar todos os elementos de um array, digamos (a b c d) em outro array ( a h c d l k) .

Agora, para cada elemento em uma matriz, preciso fazer o loop da outra matriz com um loop for. Existe alguma maneira melhor?

    
por munish 13.08.2013 / 11:27

1 resposta

1

Se você não quiser percorrer cada entrada da segunda matriz para cada valor na primeira, precisará usar uma matriz associativa. No awk você poderia fazer isso:

$ a=(a b c d);
$ b=(a h c d l k);
$ awk 'BEGIN{RS = FS} NR == FNR {a[$1] = 1; next} $1 in a' \
    <(echo "${a[*]}") <(echo "${b[*]}")
a
c
d

O bash puro se pareceria com algo assim (embora seja um pouco pesado.

declare -A a
a=([a]=1 [b]=1 [c]=1 [d]=1)
declare -A b
b=([a]=1 [h]=1 [c]=1 [d]=1 [l]=1 [k]=1)
for i in ${!a[*]}; do
    if [ ! -z "${b[$i]}" ]; then 
        echo "$i is in both";
    fi;
done
    
por 14.04.2014 / 10:52

Tags