Como posso imprimir um cabeçalho condicional ANTES do stdout, se houver alguma saída no stdout

7

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 ").

    
por silvein 09.03.2012 / 02:18

4 respostas

7

resposta inline:

find ./files -mtime +90|sed '1s/^/Files stuck in queue:\n/'
    
por 09.03.2012 / 02:50
5

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 .

    
por 09.03.2012 / 03:04
4

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 } .

    
por 09.03.2012 / 03:04
0

Ou

output=$(command)
[[ -n $output ]] && { echo "header"; echo "$output"; }
    
por 09.03.2012 / 15:44