shell脚本比较两个数组

时间:2015-03-06 16:50:31

标签: bash

我有两个数字数组,第一个数组包含所有数字,第二个数组包含第一个数字的子集,我如何编写脚本来查找第一个数组中存在但不存在于第二个数组中的缺失数字?

数组1: [0,1,2,..79] 数组2: [1,23,33,54,60,71]

我用Google搜索并尝试了我找到的不同方法,但没有一种方法可以使用

1

declare -a array3
for i in "${array1[@]}"
  if [[ "${array2[@]}" =~ "$i" || "${array2[${#array2[@]}-1]}" == "$i" ]]; then
  else
      array3+=("$i") 
  fi
done

2

array3=()
for i in "${array1[@]}";do
  skip=
  for j in "$array2[@]";do
     [[ $i == $j ]] && { skip=1; break; }
  done
  [[ -n $skip ]] || array3+=("$i")
done
declare -p array3

我是bash脚本的新手,请帮忙!

1 个答案:

答案 0 :(得分:4)

获得数组差异的一种方法是使用comm

array1=(0 1 2 3 4 5 6 7 8 9 10 11 12)
array2=(0 1 3 4 6 7 10 12)

comm -23 <(printf "%s\n" "${array1[@]}" | sort) <(printf "%s\n" "${array2[@]}" | sort) | sort -n

2
5
8
9
11