[英]inclusive and exclusive arrays in bash
我在这里的第一篇文章,让我们看看如何进行。
正在处理我有多个“主机列表”的问题。 一套用于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”的元素
如果我使用相同的差异,则会得到所有以前的值和key11。
Array1=( "key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10" )
Array2=( "key1" "key2" "key3" "key4" "key5" "key6" "key11")
Array3 =diff(Array1, Array2)
输出键11 key10 .....
我想我需要做两件事:
1!= 2但不是2!= 1的所有事物的列表
2!= 1但不是1!= 2的所有事物的列表
我希望解释一个事实,即这些内容是由我无法控制的CSV填充的,并且每个主机列表的命名约定都不同,这意味着数组的顺序/数量/等将是未知的。 我该怎么做? 我能看到的逻辑只是代码。 非常感谢您的帮助。 请让我免于整个周末的痛苦。
您可以像这样获得两个数组之差的数组:
Array3=($(sort <(printf "%s\n" "${Array1[@]}") <(printf "%s\n" "${Array2[@]}") | uniq -u))
在这里,我们首先通过使用<()
进程替换将它们显示为临时fds来对数组进行排序,在数组中,每一项都在新行上打印。
然后将其传递到uniq -u
,该uniq -u
仅打印出唯一的项目,然后首先将整个内容包装在$()
捕获字符串,然后将其输入到包装数组()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.