使用 grep 检查两个数组的确切序列



我想编写 bash 脚本以相互比较两个数组例如,假设:

array1 = ( item1 item2 item3 item4)
array2 = ( item2 item1 item3 item4)

我要检查此数组以找出Array2中的多少个项目在Array1中的同一位置。

在此示例中, item3 item4 具有相同的索引。有没有人可以帮助我如何使用bash中的" grep "命令?

这不是grep的工作。

i=0
same=0
while (( i < ${#array1[@]} && i < ${#array2[@]} )); do
    (( ${array1[i]} == ${array2[i]} && same++ ))
    (( i++ ))
done

使用尴尬是一个衬里:

array1=( item1 item2 item3 item4 )
array2=( item2 item1 item3 item4 )
awk 'FNR==NR{a[$1]=NR;next} a[$1]==FNR' <(printf "%sn" "${array1[@]}") <(printf "%sn" "${array2[@]}")
item3
item4

如果您坚持使用grep,则应该这样做。

#!/bin/bash
array1=(item1 item2 item3 item4)
array2=(item2 item1 item3 item4)
paste <(for f in "${array1[@]}" ; do echo "$f" ; done) <(for f in "${array2[@]}" ; do echo "$f" ; done) | grep $'^\([^t]*\)t\1' | cut -f 1

输出:

item3
item4

您可以在第一个数组的索引上迭代,然后将它们与第二个数组进行比较以找到相似之处。

您可以使用${!array[@]}等参数扩展扩展到数组索引列表。

for i in ${!array1[@]}; do
    [[ ${array1[$i]} == ${array2[$i]} ]] && same+=("[$i]=${array1[$i]}")
done
echo "Same indices: ${same[@]}"

最新更新