為什麼這個並行進程不將輸出寫入檔案而是印到控制台?

為什麼這個並行進程不將輸出寫入檔案而是印到控制台?

免責聲明:這是一個更普遍的問題我在biostars.org上問過關於並行和寫入文件。

當我運行一個程式時(obisplitobitools包裝中)依序讀取一個檔案並根據原始檔案中的某種標準(此處不重要)建立多個檔案:

input_file.fastq
     |____ output_01.fastq
     |____ output_02.fastq
     |____ output_03.fastq

但是,當我分割輸入檔案並並行運行它們時(來自 ubuntu 儲存庫的版本:20141022),

find . * | grep -P "^input_file" | parallel -j+3 obisplit -p output_{/.}_ -t variable_to_split_on {/}

我希望得到文件

input_file_a.fastq
     |____ output_input_file_a_01.fastq
     |____ output_input_file_a_02.fastq
     |____ output_input_file_a_03.fastq
input_file_b.fastq
     |____ output_input_file_b_01.fastq
     |____ output_input_file_b_02.fastq
     |____ output_input_file_b_03.fastq
input_file_c.fastq
     |____ output_input_file_c_01.fastq
     |____ output_input_file_c_02.fastq
     |____ output_input_file_c_03.fastq

但輸出僅列印到控制台。

是否存在某種固有的原因parallel導致此列印控制台,或者這可能是obisplit出於某種原因的行為方式?有沒有辦法說服每個核心印parallel到特定文件而不是控制台?

答案1

obisplit如果輸出被重定向,聽起來好像行為會有所不同。

您可以要求 GNU Parallel 輸出到檔案:

seq 10 | parallel --results output_{} echo this is input {} >/dev/null

(或如果您的版本較舊:

seq 10 | parallel echo this is input {} '>' output_{}

它將創建output_#, output_#.err, output_#.seq.

相關內容