是否有可能采取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
您可以根据需要添加排序
白板的微信
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代码更加混乱,而且不够干净。
添加回答
举报
0/150
提交
取消