一部のファイルを解析するために、次のスクリプトを作成しています。スクリプトは実際に私が望むことを行います。正しいファイルから正しい情報を取得します。最も外側の 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