将模式从数组搜索到另一个数组的简单方法是什么?

时间:2017-01-11 01:42:09

标签: arrays bash shell scripting

arrayA=( ab xy )
arrayB=( abkpi xyert )

我需要将arrayA的模式搜索到arrayB。如果任何模式与arrayB不匹配,则脚本应在bash shell中返回标记false

2 个答案:

答案 0 :(得分:0)

您可能需要提供有关您要执行的操作的更多信息 如果我们从字面上理解你的话:“如果任何模式与arrayB不匹配,脚本应该在bash shell中返回false标志。”那么这可以这样做:

root@debi64: A=( ab xy );B=( abkpi xyert );for Ad in "${A[@]}";do if [[ "${B[@]}" =~ "$Ad" ]];then echo "$Ad found in array B";else echo "$Ad not found in Array B";fi;done
ab found in array B
xy found in array B

root@debi64: A=( aa xy );B=( abkpi xyert );for Ad in "${A[@]}";do if [[ "${B[@]}" =~ "$Ad" ]];then echo "$Ad found in array B";else echo "$Ad not found in Array B";fi;done
aa not found in Array B
xy found in array B

root@debi64:A=( ab xx );B=( abkpi xyert );for Ad in "${A[@]}";do if [[ "${B[@]}" =~ "$Ad" ]];then echo "$Ad found in array B";else echo "$Ad not found in Array B";fi;done
ab found in array B
xx not found in Array B

root@debi64:A=( ak xt );B=( abkpi xyert );for Ad in "${A[@]}";do if [[ "${B[@]}" =~ "$Ad" ]];then echo "$Ad found in array B";else echo "$Ad not found in Array B";fi;done
ak not found in Array B
xt not found in Array B

但这足以实现你的目标吗? 我怀疑不是。

答案 1 :(得分:0)

使用awk。使用进程替换将数组读入awk。 在另一个数组中找到所有项目的示例:

$ awk -v RS=' ' 'NR==FNR{a[$1];next} !($1 in a){exit 1}' <(echo ${arrayA[*]}) <(echo ${arrayA[*]})
$ echo $?
0

和另一个没有找到的人。 Awk退出并返回1符合arrayB中不在arrayA中的第一项:

$ awk -v RS=' ' 'NR==FNR{a[$1];next} !($1 in a){exit 1}' <(echo ${arrayA[*]}) <(echo ${arrayB[*]})
$ echo $?
1