我想编写 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[@]}"