Como fazer backup de saída de cada procedimento de pipe?

2

Estou usando um procedimento de pipe para análise de dados todos os dias:
alias analyze='fetch_data | prog1 | prog2 | prog3 > result.txt'
Este script funciona bem principalmente, mas tem cerca de 1% de probabilidade de falhar. Como executá-lo de novo e de novo é bastante demorado, espero poder fazer o backup do resultado para cada procedimento, por exemplo:

/tmp/2017-10-31-10am/fetch_data.txt
/tmp/2017-10-31-10am/prog1.txt
/tmp/2017-10-31-10am/prog2.txt
/tmp/2017-10-31-10am/prog3.txt
    
por Endle_Zhenbo 30.10.2017 / 23:47

2 respostas

1

Para que o alias gere um diretório em / tmp com base na data de hoje, no formato /tmp/YYYY-MM-DD-HH (seguido por am ou pm), salve toda a saída intermediária em arquivos separados:

alias analyze='d=$(date +"/tmp/%Y-%m-%H%p"); mkdir "$d" && fetch_data | tee "$d/fetch_data.txt" | prog1 | tee "$d/prog1.txt" | prog2 | tee "$d/prog2.txt" | prog3 > "$d/result.txt"'

Ou dividido em várias linhas:

alias analyze='
  d=$(date +"/tmp/%Y-%m-%H%p")
  mkdir "$d" && 
  fetch_data | tee "$d/fetch_data.txt" | 
  prog1 | tee "$d/prog1.txt" | 
  prog2 | tee "$d/prog2.txt" | 
  prog3 > "$d/result.txt"
  '

Isso depende de date para gerar o nome / modelo de diretório e o utilitário tee para duplicar os dados recebidos em um arquivo, bem como passá-lo ao longo do pipeline.

Um exemplo de execução (com programas criados substituídos por fetch_data & etc):

alias a='
  d=$(date +"/tmp/%Y-%m-%H%p")
  mkdir "$d" && 
  seq 10 | tee "$d/seq.out" | 
  head -6 | tee "$d/head.out" | 
  sed s/3/j/ | tee "$d/sed.out" | 
  tail -4 > "$d/result.txt"
  '

Com os resultados:

$ ls /tmp/2017-10-19PM/
head.out  result.txt  sed.out  seq.out

$ cat /tmp/2017-10-19PM/seq.out
1
2
3
4
5
6
7
8
9
10

$ cat /tmp/2017-10-19PM/head.out
1
2
3
4
5
6

$ cat /tmp/2017-10-19PM/sed.out
1
2
j
4
5
6

$ cat /tmp/2017-10-19PM/result.txt
j
4
5
6
    
por 31.10.2017 / 00:39
1

Não tenho certeza do que você está perguntando. Se você quiser salvar a saída de cada programa, faça

fetch_data | tee f_d.txt | prog1 | tee prog1.txt | prog2 | tee prog2.txt | prog3 > result.txt

(abreviei fetch_data.txt to f_d.txt apenas para legibilidade). Não seria prog3.txt igual a result.txt ?

    
por 31.10.2017 / 01:13

Tags