私は単語のスペース区切りリストで互いに離れた一定数の値である特定の値を反復処理する最も効率的な方法を見つけようとしています(配列を使用したくない)。例えば、
list="1 ant bat 5 cat dingo 6 emu fish 9 gecko hare 15 i j"
したがって、リストを繰り返し処理し、1、5、6、9、および15のみにアクセスできるようにしたいのです。
編集:リストから取得しようとしている値は、リストの残りの部分と形式が異なる必要がないことを明確にすべきでした。それらを特別なものにしているのは、リスト内の位置だけです(この場合、位置1,4,7 ...)。リストはそうかもしれません1 2 3 5 9 8 6 90 84 9 3 2 15 75 55
が、私はまだ同じ数字が欲しいです。また、リストの長さがわからないと仮定して、できるようにしたいと思います。
私がこれまで考えてきた方法は次のとおりです。
方法1
set $list
found=false
find=9
count=1
while [ $count -lt $# ]; do
if [ "${@:count:1}" -eq $find ]; then
found=true
break
fi
count=`expr $count + 3`
done
方法2
set list
found=false
find=9
while [ $# ne 0 ]; do
if [ $1 -eq $find ]; then
found=true
break
fi
shift 3
done
方法3 パイピングはこれが最悪のオプションになると確信していますが、好奇心からsetを使用しない方法を探していました。
found=false
find=9
count=1
num=`echo $list | cut -d ' ' -f$count`
while [ -n "$num" ]; do
if [ $num -eq $find ]; then
found=true
break
fi
count=`expr $count + 3`
num=`echo $list | cut -d ' ' -f$count`
done
それでは、最も効率的なものは何でしょうか、またはもっと簡単な方法が欠けていますか?