2017-09-13 15 views
1

: ": 쓰기에 실패했습니다 : 일종의 표준 출력 : 파이프가 깨"bash는 오류 종류의 "종류 : 표준 출력 : 쓰기 실패 파이프가 깨"나는이 스크립트를 실행하면 내가 가진 오류 메시지가받을

사람이 할 수있는 경우를 이 오류로 미쳐 버릴 것입니다.

입력 파일은 모두 FASTA 형식의 DNA 시퀀스가 ​​들어있는 파일 목록이므로 각 파일에는 여러 시퀀스 (각 시퀀스가 ​​한 줄에 있음)가 있습니다. 형식 : $ 1 (식별자) $ 2,3,4,5,6,7 & 8 (더 많은 값) $ 9 (DNA 시퀀스)

그런 다음 각 파일의 시퀀스 수 ($ common_hits)로이 시퀀스를 선택하고 싶습니다.이 숫자는 수정 값이 아니지만 예를 들어 6을 설정합니다. - 6 시퀀스 미만의 모든 파일을 제거해야합니다. - 6 개 시퀀스가있는 파일은 정상입니다. - 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), 두 번째 동일한 스크립트를 원한다면 se를 사용하십시오 t -x를 스크립트 시작 부분에 표시하고 결과를 표시하십시오. 요구 사항 (코드 태그의 Input_file 및 output_file은 무엇인지)을 알려줘야합니다. – RavinderSingh13

+0

조언 해 주셔서 감사합니다. 지금 이해하기 쉽습니다. – Dani

답변

1

sort | head항상 사건이 될 것 같은 sort에 의해 작성된 스트림이 더 이상 그 소비보다 클 경우 sort 전에, (모든 출력을 작성했습니다, 오류를보고 by head). 이것은 디자인에 의한 것입니다 : sort이 모든 출력을 쓸 수 없다면, 실패 할 것으로 예상됩니다; 그러한 실패를 무시하면 다른 이유 (디스크가 꽉 찼거나 네트워크 연결이 끊어진 경우 등)로 출력을 쓸 수없는 경우도 무시합니다.

이 문제는 이상하거나 바람직하지 않습니다. 오류에 대해 무시하고 무시하고 파이프 라인의 출력 행 수를 확인하여 오류 상태인지 여부를 확인하십시오.

+0

고맙습니다. 분류 결과에 오류가 있어도 출력에 영향을 미치지 않습니다. – Dani

+0

오른쪽 - "오류"는'sort'가'$ common_hits' 행 이상을 쓸 수 없다는 것입니다. –

+0

즉, "깨진 파이프"오류는 종종 무해하며 무시하거나 운이 좋으면 무시할 수 있습니다. –