나는 데이터 분석을 위해 매일 파이프라인 프로그램을 사용합니다.
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.txt
result.txt