Você está fazendo
for x in 'find . $PROGFILES -name "*.fgl"' do awk (awk_program) $x doneque inicia um novo processo
awk
para cada arquivo.
Por quê?
Apenas faça
awk (awk_program) *.fgl "$PROGFILES"/*.fgl
, a menos que você precise pesquisar subdiretórios. Se você precisa pesquisar subdiretórios, é um pouco mais complicado:
find . "$PROGFILES" -name "*.fgl" -exec awk (awk_program) {} +
Notas:
- Você deve sempre citar as variáveis do shell (como
"$PROGFILES"
e"$x"
) a menos que você tenha uma boa razão para não e você tem certeza que sabe o que está fazendo. -
Você não precisa usar
cat
desse jeito. Você pode colocar o programa awk entre aspas:awk ' / envget | env-get | \"envget\" | \"env-get\" / { gsub( /get-env/, "envget") ︙ } ' "$x"
ou você pode colocar em um arquivo e dizer
awk -f (awk_program_file)
. - Nenhuma das abordagens acima é garantida para obter as contagens totais
porque há um limite (muito grande) no tamanho de uma linha de comando.
Se você tem tantos arquivos que o comprimento combinado de seus nomes
excede esse limite,
find
invocará vários processosawk
para cobrir todos os nomes, e você voltará a receber contagens incompletas. Uma maneira de lidar com isso seria para coletar as saídas dosawk
de execuções individuais e combiná-las.