为了账号安全,请及时绑定邮箱和手机立即绑定

bash中两个数组的比较/差异

bash中两个数组的比较/差异

是否有可能采取bash中两个数组的差异。如果您可以建议我这样做的话,那真的很棒。代码:Array1=( "key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10" )Array2=( "key1" "key2" "key3" "key4" "key5" "key6" ) Array3 =diff(Array1, Array2)Array3 ideally should be :Array3=( "key7" "key8" "key9" "key10" )感谢您的帮助。
查看完整描述

3 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

echo ${Array1[@]} ${Array2[@]} | tr ' ' '\n' | sort | uniq -u

输出量


key10

key7

key8

key9

您可以根据需要添加排序


查看完整回答
反对 回复 2019-10-17
?
白板的微信

TA贡献1883条经验 获得超3个赞

每当出现一个问题,处理可能无法排序的唯一值时,我的脑子立刻就醒悟。这是我的看法。


#!/bin/bash


diff(){

  awk 'BEGIN{RS=ORS=" "}

       {NR==FNR?a[$0]++:a[$0]--}

       END{for(k in a)if(a[k])print k}' <(echo -n "${!1}") <(echo -n "${!2}")

}


Array1=( "key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10" )

Array2=( "key1" "key2" "key3" "key4" "key5" "key6" )

Array3=($(diff Array1[@] Array2[@]))

echo ${Array3[@]}

输出量

$ ./diffArray.sh

key10 key7 key8 key9

*注意**:像给出的其他答案一样,如果数组中有重复的键,则它们只会被报告一次;这可能是或不是您正在寻找的行为。用于处理该问题的awk代码更加混乱,而且不够干净。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 1051 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信