É difícil dizer por que seu script se comporta mal, já que não sabemos com o que os arquivos com os quais você está lidando. Tudo o que sabemos é que você está interessado em linhas que contêm a string ID
e que você gostaria de obter o que quer que seja depois de um =
nessas linhas.
Seu script contém duas variáveis não usadas: count
(uma string contendo um comando shell) e pid
(uma variável vazia). Você também passa por um bom número de aros para chegar ao que está depois de =
:
more "$line" | grep ID | awk -F '=' '{ print $2 }'
O comando more
é um pager, o que significa que é um utilitário para arquivos exibindo . Em vez de usar isso, você pode deixar grep
ler o arquivo diretamente:
grep ID "$line" | awk -F '=' '{ print $2 }'
Mas isso é apenas permitir que grep
faça algo que awk
possa fazer por si só,
awk -F '=' '/ID/ { print $2 }' "$line"
Mas podemos fazer melhor que isso. Em vez de salvar todos os nomes de caminhos no arquivo $filename
, podemos deixar find
fazer todo o trabalho para nós:
find /opt/Logs -type f -size +10k \
-exec awk -F '=' '/ID/ { print $2 }' {} + >pid.txt
Isso localizará todos os arquivos regulares em ou abaixo de /opt/Logs
com tamanho maior que 10 KB. Para cada arquivo, o que está depois (o primeiro) =
em cada linha contendo a string ID
será impresso. O resultado disso será salvo em pid.txt
.
Relacionados: