我在这里的第一篇文章,让我们看看这是怎么回事。
处理我有多个"主机列表"的问题。一套用于linux,一套用于Windows,一套用于打印机。
我还列出了当前正在监控的内容。
我一直在研究一些代码来尝试统一主机列表,然后得到该列表和当前监控列表的差异。
我在这里找到了一些很好的代码:
Array1=( "key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10" )
Array2=( "key1" "key2" "key3" "key4" "key5" "key6" )
Array3 =diff(Array1, Array2)
Array3理想情况下应该是: Array3 =(" key7"" key8"" key9"" key10")
这给了我需要添加的内容列表并且工作得非常好。
让我们假设Array2包含一个元素,其值为" key11"
如果我使用相同的差异,我会获得所有以前的值AND key11。
Array1=( "key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10" )
Array2=( "key1" "key2" "key3" "key4" "key5" "key6" "key11")
Array3 =diff(Array1, Array2)
这个输出 key 11 key10 .....
我想我需要做两件事:
1!= 2但不是2的所有内容的列表!= 1
所有2!= 1但不是1!= 2的列表
我希望说明这些内容是由CSV填充的,其内容我无法控制,每个主机列表的命名约定的变化意味着数组的顺序/数量/等等未知。 我该怎么办?我可以看到这个逻辑不是代码。非常感谢任何帮助。请让我免受整个周末的痛苦。
答案 0 :(得分:0)
您可以获得两个数组的差异数组,如下所示:
Array3=($(sort <(printf "%s\n" "${Array1[@]}") <(printf "%s\n" "${Array2[@]}") | uniq -u))
我们首先通过将数组作为临时fds进行排序,并使用<()
进程替换来对数组进行排序,其中数组将在新行上打印每个项目。
然后通过管道传输到uniq -u
,只打印出唯一的项目,然后在$()
中首先包装整个内容,捕获字符串,然后输入到包装数组()
。