Saya memiliki skrip bash shell di mana saya menyalurkan beberapa data melalui sekitar 5 atau 6 program yang berbeda kemudian hasil akhir menjadi file yang dibatasi tab.
Saya kemudian melakukan hal yang sama lagi untuk dataset serupa yang terpisah dan output ke file kedua.
Kemudian kedua file tersebut dimasukkan ke dalam program lain untuk analisis komparatif. misalnya untuk mempermudah
Data1 | this | that |theother | grep |sed | awk |whatever > Data1Res.csv
Data2 | this | that |theother | grep |sed | awk |whatever > Data2Res.csv
AnalysisProg -i Data1res.csv Data2res.csv
Pertanyaan saya adalah: bagaimana saya bisa membuat step1 dan step2 berjalan pada saat yang sama (misalnya menggunakan &) tetapi hanya meluncurkan step3 (AnalysisProg) ketika keduanya selesai?
Terima kasih
ps AnalysisProg tidak akan berfungsi pada streaming atau fifo.
scripting
parallelism
Stephen Henderson
sumber
sumber
tee
dan memprosesnya dengan duagrep
proses bersamaan : unix.stackexchange.com/questions/120333/…nohup
mungkin tetapi masih mempertahankan cara berkomunikasi dengan proses: unix.stackexchange.com/questions/121253/…Jawaban:
Gunakan
wait
. Sebagai contoh:akan:
Lihat, misalnya, pertanyaan ini .
sumber
Jawaban cxw tidak diragukan lagi solusi yang lebih disukai, jika Anda hanya memiliki 2 file. Jika 2 file hanyalah contoh dan Anda pada kenyataannya memiliki 10.000 file, maka solusi '&' tidak akan berfungsi, karena itu akan membebani server Anda. Untuk itu Anda memerlukan alat seperti GNU Parallel:
Untuk mempelajari lebih lanjut tentang GNU Parallel:
sumber
Salah satu cara untuk melakukan ini bisa terlihat seperti:
Dengan cara ini Anda latar belakang kedua pipa tetapi masih menunggu mereka untuk menyelesaikan mengeksekusi sebelum menggabungkan output mereka ke stdin yang dievaluasi dalam dokumen di sini dan diserahkan ke AnalysisProg. Jika Anda dapat menggunakan
wait
ini bahkan lebih baik daripadawhile ps
loop, tetapi, tergantung shell,wait
bisa keberatan jika Anda memerintahkannya untuk menunggu proses yang bukan anak dari shell saat ini.Perhatikan juga bahwa metode di atas akan menyusun keluaran - sehingga kedua proses akan ditulis sekaligus. Jika Anda ingin mereka terpisah, atau menambahkan satu sama lain yang mungkin Anda bisa lakukan:
Saya telah menunjukkan konsep-konsep ini sebelumnya. Mungkin demo terbaik ada di sini dan di sini .
sumber
Coba gunakan ini.
sumber
wait
roda?