入れ子になったForループの無限ループ

入れ子になったForループの無限ループ

一部のファイルを解析するために、次のスクリプトを作成しています。スクリプトは実際に私が望むことを行います。正しいファイルから正しい情報を取得します。最も外側の for ループが正しい回数だけ実行されるようです。下のネストされたループは必要以上に実行され、最も内側のループは無限に実行されます。

#!/bin/bash
for f in $HOME/configtool/interfaces/*
do
     for d in $(cat $HOME/configtool/asrlist);
     do
          for n in $(cat $HOME/configtool/nodes);
          do
               grep $d $f | grep 'up\|down' >> $HOME/configtool/distill/$n
          done
     done
done

スケーラビリティのため、可能であればループを終了するためにマジックナンバーを使用することを避けたいと思います。

誰でもどんなアイデアがありますか?

ベストアンサー1

実際、ループはまったく必要ありません。grep -f正規表現検索のためにファイルを読み取ることができます。最も内側のループは元のgrepを繰り返し繰り返しますが、同じ出力を別のファイルに書き込みます。なぜダメ、

out=$(mktemp)
grep --no-filename --file="$HOME"/configtool/asrlist -- "$HOME"/configtool/interfaces/* | grep 'up\|down' > "$out"
for n in $(cat "$HOME"/configtool/nodes)
do
  cp "$out" "$HOME"/configtool/distill/"$n"
done

おすすめ記事