Bash:删除一个包含另一个数组中的值的数组元素

时间:2015-12-10 09:48:10

标签: arrays bash

我想删除包含其他数组元素的数组元素。

EG

  

array1 =(aaaa bbbb abcd)

     

array2 =(b c)

     

结果=(aaaa)

我已经编写了这段代码,但它没有工作

for element in "${array2[@]}"
    do
        result=(${array1[@]/.*$element.*})
    done
你可以告诉我为什么以及我应该做什么呢?

2 个答案:

答案 0 :(得分:1)

我认为你错了你需要逗号作为数组元素之间的分隔符。但是逗号实际上成为元素的一部分。 除此之外,result也不会因为您需要聚合已删除的元素而烦恼。但是result是从array1分配的。所以删除了元素 从上一次迭代中将再次成为resut的一部分。

array1=(aaaa bbbb abcd)
array2=(b c)   
result=("${array1[@]}")

for element in "${array2[@]}"
do
     result=(${result[@]/*${element}*/})
done

echo "${result[@]}"

这会将数组复制到result数组中,并使用array2从中删除元素。

答案 1 :(得分:1)

这是我的捅。 我很确定这可以通过awk完全完成,但我还没有发现:

#!/bin/bash
array1=(aaaa bbbb abcd)
array2=(b c)   
result=()
for i in "${array1[@]}"
do
   sumIndexOf=0
   for j in "${array2[@]}"
   do
        sumIndexOf=$((sumIndexOf + $(echo $i $j | awk '{print index($1,$2)}')))     
   done
   if [ "$sumIndexOf" = "0" ]; then
        result+=($i)
   fi   
done
printf '%s\n' "${result[@]}"

参考/使用: