2017-09-13 5 views
1

:「:書き込みに失敗しました:ソートを標準出力:壊れたパイプ」bashのエラーソートの「並べ替え:標準出力:失敗を書く壊れたパイプ」私はこのスクリプトを実行すると、私はとのエラーメッセージ受け取る

誰かが可能であればをこのエラーで狂ってしまいます。

入力ファイルはすべてFASTA形式のDNA配列を含むファイルのリストなので、各ファイルには複数のシーケンス(各シーケンスは1行に収められています) $ 2,3(DNA配列)の$ 1(識別子)$ 2,3,4,5,6,7 &の8(多くの値)

次に、このシーケンスを各ファイルのシーケンス数($ common_hits)で選択します(この数値は修正値ではありませんが、例として6を設定します) - 6シーケンス未満のすべてのファイルを削除する必要があります - 6つのシーケンスを持つファイルはOK - 6つ以上のシーケンスを持つファイルを6つのシーケンスに縮小する必要があります(これらのシーケンスはフィールド$ 5のより高い値によって選択されます)

出力ファイルはすべて6つのシーケンスとシーケンス(フィールド$ 9)は識別子の後の行にある必要があります

私はそれが動作することを確認したいので、今は6シーケンス以上のオリジナルファイルを削除していません

par_list=`ls -1 *BR` 

common_hits="6" 

for i in ${par_list} 

do 

    if [ "`cat ${i} | wc -l`" -lt "${common_hits}" ] 
    then 
     rm -f ${i} 
    elif [ "`cat ${i} | wc -l`" -gt "${common_hits}" ] 
    then 
     cat ${i} | sort -nr -k 5 | head -n ${common_hits} | \ 
     awk '{print $1" " $2" " $3" " $4" " $5" " $6" " $7"   "$8 ; print $9}' > ${i}.ph 
    fi 

done 
+0

スタックオーバーフローサイトへようこそ、コードをコードタグにまとめてください – RavinderSingh13

+0

私はあなたのスクリプトに多くの変更を加えることができました。あなたは2つの事柄を投稿してください.1つはあなたの必要条件です(サンプルInput_fileを使用してください)。と期待されるoutput_file)、2番目の場合は、同じスクリプトだけを使用したい場合は、seあなたの必要条件(Input_fileとコードタグのoutput_fileについて)を教えてください。 – RavinderSingh13

+0

アドバイスありがとう、私は今理解してほしいと思います – Dani

答えて

1

sort | headhead終了する(あるいはそのSTDINを閉じた)場合は、常にsort前に、エラーを報告しsortによって書かれたストリームがはるかに長いことが消費よりもあれば、場合のように(そのすべての出力を書いていますby head)。これは設計によるものです。sortがすべての出力を書き込むことができない場合は、失敗することが予想されます。このような失敗を無視すると、他の理由(ディスクがいっぱい、ネットワーク接続が壊れているなど)で出力を書き込めない場合も無視されます。

これについては何もありません。エラーについて、無視し、パイプラインからの出力行数を確認して、エラー状態かどうかを判断してください。

+0

ありがとうございました。ソートのエラーがあっても出力に影響はありませんか? – Dani

+0

右 - "エラー"は、 'sort'が' $ common_hits'行以上を書くことができないことです。 –

+0

つまり、「壊れたパイプ」エラーは無害であり、無視できます。もしあなたが幸運であれば、抑止さえできます。 –

関連する問題