resposta inline:
find ./files -mtime +90|sed '1s/^/Files stuck in queue:\n/'
Eu tenho um processo que filtra uma lista de arquivos de um diretório (com find
check para ver se há arquivos mais antigos que um determinado período para mostrar que uma fila está presa). Pode ou não devolver qualquer coisa e, se o fizer, é enviado por correio para cron
.
O que eu gostaria de saber é se existe um programa ou um método bash
simples para canalizar essa saída, e se houver alguma saída , prefixar uma linha de cabeçalho (como " Estes são os arquivos presos na fila ").
Como os outros métodos não fornecem um método bash
, como foi solicitado:
command | while IFS= read -r line; do
(( i )) || { printf '%s\n' 'These are the files stuck in the queue:' ; (( i++ )) ; }
printf '%s\n' "${line}"
done
Todos os comandos usados são internos para bash
.
Se não houver linhas de saída, nada será impresso. Se houver, a linha de cabeçalho será impressa e, em seguida, a saída de command
.
Quando descubro que quero manter o estado ao processar um fluxo de entrada, acho que o awk geralmente é a melhor ferramenta para usar.
Nesse caso, você deseja processar um fluxo e, se vir alguma entrada, escreva um cabeçalho e registre que escreveu o cabeçalho.
awk '!input_seen { print "header"; input_seen = 1 } 1'
Isto imprimirá um cabeçalho se a variável input_seen
for falsa (que é padronizada se não for definida) e a define como um valor de verdade (1). O 1
no final é outra regra que é uma maneira abreviada de dizer: imprima a linha atual - você também pode substituir o 1
por { print }
.
Ou
output=$(command)
[[ -n $output ]] && { echo "header"; echo "$output"; }
Tags text-processing email pipe shell