각 파이프라인 프로그램의 출력을 백업하는 방법은 무엇입니까?

각 파이프라인 프로그램의 출력을 백업하는 방법은 무엇입니까?

나는 데이터 분석을 위해 매일 파이프라인 프로그램을 사용합니다.
alias analyze='fetch_data | prog1 | prog2 | prog3 > result.txt'
이 스크립트는 대부분의 경우 잘 작동하지만 약 1%의 경우 실패합니다. 반복해서 실행하는 것은 시간이 많이 걸리기 때문에 각 프로세스의 결과를 백업할 수 있기를 바랍니다. 예를 들면 다음과 같습니다.

/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

답변1

별칭이 오늘 날짜 /tmp/YYYY-MM-DD-HH(am 또는 pm 뒤에 오는 형식)를 기반으로 /tmp에 디렉터리를 생성하도록 하려면 모든 중간 출력을 별도의 파일에 저장합니다.

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"'

또는 여러 줄로 분할합니다.

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"
  '

이는 date디렉터리 이름/템플릿 생성 에 의존하며tee들어오는 데이터를 파일에 복사하고 파이프를 따라 전달하는 유틸리티입니다.

예제를 실행하세요(fetch_data 등을 만들어진 프로그램으로 대체):

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"
  '

결과:

$ 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

답변2

당신이 무엇을 요구하는지 잘 모르겠습니다. 각 프로그램의 출력을 저장하려면 다음을 수행하십시오.

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

(가독성을 위해 축약한 것입니다 fetch_data.txt. ) 와 같지 f_d.txt않을까요 ?prog3.txtresult.txt

관련 정보