Loop infinito em loop aninhado

0

Estou trabalhando no seguinte script para analisar alguns arquivos para mim. O script realmente faz o que eu quero - eu recebo as informações corretas nos arquivos corretos. Parece que o loop externo mais externo é executado no número correto de vezes. O loop aninhado a seguir é executado mais vezes do que o necessário, e o loop mais interno é executado infinitamente.

#!/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

Eu gostaria de evitar usar um número mágico para matar o loop, se possível, devido à escalabilidade

Alguém tem alguma ideia?

    
por nedwards 14.06.2017 / 23:32

1 resposta

1

Você realmente não precisa fazer um loop: grep -f pode ler um arquivo para regexes pesquisar. E o loop mais interno está apenas repetindo os greps originais repetidas vezes, mas escrevendo a mesma saída para arquivos diferentes. Por que não,

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
    
por 14.06.2017 / 23:52

Tags