Основная цель состоит в том, чтобы найти периодическую последовательность в массиве с Баш, например:Как определить периодическую последовательность в массиве целых чисел
{2, 5, 7, 8, 2, 6, 5 , 3, 5, 4, 2, 5, 7, 8, 2, 6, 5, 3, 5, 4, 2, 5, 7, 8, 2, 6, 5, 3, 5, 4}
или {2, 5, 6, 3, 4, 2, 5, 6, 3, 4, 2, 5, 6, 3, 4}
, который должен быть возвращен как идентифицированный последовательность для двух примеров
{2, 5, 7, 8, 2, 6, 5, 3, 5, 4} и {2, 5, 6, 3, 4}
I tri ed со списком и под-списком из двух массивов, но без успеха. Мне не хватает чего-то в моих петлях. Я думаю, что алгоритм «черепаха и заяц» является альтернативой, но я пропускаю некоторые знания в командах bash для его реализации.
Я предпочитаю оставлять свою вторую попытку с черепахой и зайцем, как и первый, кажется, бесполезная попытка:
#!/bin/bash
declare -A array=(1, 2, 3, 1, 2, 3, 1, 2, 3)
declare -A found=()
loop="notfound"
tortoise=`echo ${array[0]}`
hare=`echo ${array[0]}`
found[0]=`echo ${array[0]}`
while ($loop == "notfound")
do
for ((i=1;i=`echo ${#array[@]}`;i++))
do
if ((`echo ${array[$#]}` == $hare))
then
echo "no loop found"
exit 0
fi
hare=`echo ${array[$i]}`
if ((`echo ${array[$#]}` == $hare))
then
echo "no loop found"
exit 0
fi
hare=`echo ${array[$(($i+1))]}`
tortoise=`echo ${array[$i]}`
found[$i]=`echo ${array[$i]}`
if (($hare == $tortoise))
then
loop="found"
printf "$found[@]}"
fi
done
done
Я получил ошибки на ассоциативном массиве нуждаясь Indice
'Я попробовал со списком и подсписком из двух массивов, но без успеха я должен отсутствовать что-то в моем следующей итерации цикла лучше размещать код здесь – Sundeep
является Perl решения в порядке? например, если эти два значения массива печатаются (с разделителем) в файл, например 'ip.txt' .. тогда это найдет минимальный повторяющийся набор.' perl -lnE '$, = ":"; @a =/\ д +/г; ($ i = 1; $ i <$ # a/2 + 1; $ i ++) {push (@ b, @ a [0 .. $ i-1]) foreach (0 .. $ # a/$ i); if (@b ~~ @a) {print @a [0 .. $ i-1]; last} undef @b} 'ip.txt' – Sundeep
Вы не можете сделать это с помощью команды 'grep -o'? например: 'TEST = (1 2 3 4 5); echo $ {TEST [@]} | grep -o "3 4" ' – scoobydoo