我想写一个 bash 脚本来比较两个数组 比如假设:
array1 = ( item1 item2 item3 item4)
array2 = ( item2 item1 item3 item4)
我将检查此数组,以找出array2中有多少项
在此示例中, item3 和 item4 具有相同的索引。 有没有人帮我在bash中使用“ grep ”命令怎么做?
答案 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[@]}"