私はデータ分析に毎日パイプラインプログラムを使用しています。
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