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

时间:2014-03-09 14:52:33

标签: linux bash terminal grep

我想写一个 bash 脚本来比较两个数组 比如假设:

array1 = ( item1 item2 item3 item4)

array2 = ( item2 item1 item3 item4)

我将检查此数组,以找出array2中有多少项完全在array1中的相同位置。

在此示例中, item3 item4 具有相同的索引。 有没有人帮我在bash中使用“ grep ”命令怎么做?

4 个答案:

答案 0 :(得分:2)

这不是grep的工作。

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

答案 1 :(得分:0)

使用awk它是一个班轮:

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

答案 2 :(得分:0)

如果您坚持使用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

答案 3 :(得分:0)

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

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

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