2

以下の基本的なパターンに従ういくつかのソフトウェアを使用して、bash スクリプトを実行しています。

while read sample; do
    software ${sample} > output.txt
done <samples.txt

特定のサンプルでは、​​「サイト Pf3D7_02_v3:274217 は別の亜種と重複しています。スキップしています...」

このメッセージはソフトウェアの実行を停止しませんが、結果は偽になります。したがって、メッセージが表示された場合は、ソフトウェアを停止し、while ループを続行して次のサンプルに移動します。samples.txt には多くのサンプルがあるため、これを手動で行うことはできません。メッセージがどのサンプルに対するものであるかを示す方法も役立ちます。そのままでは、メッセージがどのループに与えられたのかを知らずに、そのメッセージの多くの行を取得します。

これを手伝うことは可能ですか?

私が使用しているプログラムは、bcftools コンセンサスと呼ばれています。さらに情報を提供する必要がある場合はお知らせください。

編集:"> output.txt"を追加しました-削除しすぎたことに気付きました

編集 2: これは、以下の chepner による提案を使用した完全なスクリプトです。申し訳ありませんが、それは少し難しいです:

mkfifo p
while IFS= read -r sample; do
    bcftools consensus --fasta-ref $HOME/Pf/MSP2_3D7_I_region_ref_noprimer.fasta --sample ${sample} --missing N $EPHEMERAL/bam/Pf_eph/MSP2_I_PfC_Final/Pf_60_public_Pf3D7_02_v3.final.normalised_bcf.vcf.gz --output ${sample}_MSP2_I_consensus_seq.fasta | tee p &
    grep -q -m 1 "The site Pf3D7_02_v3" p && kill $!
done <$HOME/Pf/Pf_git/BF_Mali_samples.txt
rm p
4

2 に答える 2