Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在unix中比较数组元素和打印不匹配_Bash - Fatal编程技术网

Bash 在unix中比较数组元素和打印不匹配

Bash 在unix中比较数组元素和打印不匹配,bash,Bash,我想比较下面的数组,并在另一个数组中只打印/存储不同的项。你能帮忙吗 eg Array1 for : 20150313 20150324 20150325 20150326 20150330 20150331 20150401 20150402 20150403 20150406 20150407 20150408 20150409 20150410 20150413 20150414 20150415 20150416 20150417 20150418 20150420 20150421

我想比较下面的数组,并在另一个数组中只打印/存储不同的项。你能帮忙吗

eg Array1  for :
20150313 20150324 20150325 20150326 20150330 20150331 20150401 20150402 20150403 20150406 20150407 20150408 20150409 20150410 20150413 20150414 20150415 20150416 20150417 20150418 20150420 20150421 20150422 20150423 20150424 20150427 20150428

eg Array 2 for :
20150313 20150323 20150324 20150325 20150326 20150327 20150330 20150331 20150401 20150402 20150403 20150406 20150407 20150408 20150409 20150410 20150413 20150414 20150415 20150416 20150417 20150418 20150420 20150421 20150422 20150423 20150424 20150427 20150428 20150313 20150323 20150324 20150325 20150326 20150327 20150330 20150331 20150401 20150402 20150403 20150406 20150407 20150408 20150409 20150410 20150413 20150414 20150415 20150416 20150417 20150418 20150420 20150421 20150422 20150423 20150424 20150427 20150428
如果我在bash中尝试此操作,它只打印数组1中的值

Array3=()
$ for i in "${Array1[@]}"; do
>     skip=
>     for j in "${Array2[@]}"; do
>         [[ $i == $j ]] && { skip=1; break; }
>     done
>     [[ -n $skip ]] || Array3+=("$i")
> done

请协助。

要获取
set2-set1
您可以将
grep
过程替换一起使用:

grep -wFvf <(printf "%s\n" "${arr1[@]}") <(printf "%s\n" "${arr2[@]}")
20150323
20150327
20150323
20150327

如果我理解正确,您没有尝试将
a1[I]
a2[I]
进行比较,因为可能存在偏移。我能想到的一个简单方法是将它们放在文本变量中,用换行符分隔值,然后使用
diff
对它们进行比较。但是,如果顺序不重要,并且只有元素的存在才重要,我会先对uniq进行排序,因为它只在两个数组中给出唯一的值。我只想打印array1中不在array2中的元素。您希望得到什么输出,发布它。它在bash中显示了以下错误:命令替换:意外标记附近的语法错误
('命令替换:
grep-wFvf arr1=20150323 20150327 20150328 20150329 arr2=20150323 20150324我想打印的20150324在arr2中不可用,而20150327 20150328 20150329在arr1中不可用。抱歉,如果我在第一个线程中不清楚,您确定使用的是BASH吗?运行
BASH
,进入BASH shell,然后尝试above commands.yes在bash中,它现在打印下面的20150323:command not found不是所有的desimilar datesgrep-wFvf
arr3=($(grep -wFvf <(printf "%s\n" "${arr1[@]}") <(printf "%s\n" "${arr2[@]}")))
grep -wFvf <(printf "%s\n" "${arr2[@]}") <(printf "%s\n" "${arr1[@]}")