Output

為什麼這個並行程序不將輸出寫入文件而是列印到控制台?

  • September 11, 2017

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

當我順序執行程序(obisplitobitools)時,它會讀取一個文件並根據原始文件中的某些標準(此處不重要)創建多個文件:

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

但是,當我拆分輸入文件並並行執行它們時(來自 ubuntu repo 的版本: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列印到特定文件而不是控制台?

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.

引用自:https://unix.stackexchange.com/questions/367165