"bsub"를 사용할 때 "|"로 파이프(이전 명령의 출력을 다음 명령으로 파이프)

"bsub"를 사용할 때 "|"로 파이프(이전 명령의 출력을 다음 명령으로 파이프)

안녕하세요, 이것은 매우 기본적인 질문인 것 같습니다.

"bsub"를 사용할 때 "파이핑"을 수행하기 위한 특정 구문이 있습니까?

제가 이런 문제에 직면했을 때 이렇게 묻습니다.

# try to run the same command successfully ran in another host
bsub fastx_trimmer -Q33 -f 1 -l 230 -i myfile.fastq | fastq_quality_trimmer -Q33 -t 18 -l 20 -o Trimmed_file.fastq &

하지만 오류가 발생했습니다.

fastq_quality_trimmer: input file (-) has unknown file format (not FASTA or FASTQ), first character = J (74)

두 번째 명령은 첫 번째 명령의 출력을 찾을 수 없는 것 같습니다.

# try to run command without using "|"
bsub fastx_trimmer -Q33 -f 1 -l 230 -i myfile.fastq -o Trimmed_file.fastq
# seemed to work!

bsub fastq_quality_trimmer -Q33 -t 18 -l 20 -i Trimmed_file.fastq -o Trimme_file2.fastq &
# Also seemed to work!

# try to pipe again, did not work...
bsub fastx_trimmer -Q33 -f 1 -l 230 -i myfile.fastq | fastq_quality_trimmer -Q33 -t 18 -l 20 -o Trimme_file2.fastq &

# when call command without bsub, it seemed to work. 
fastx_trimmer -Q33 -f 1 -l 230 -i myfile.fastq | fastq_quality_trimmer -Q33 -t 18 -l 20 -o Trimme_file2.fastq &
# so the issue seemed to be "bsub"

내 호스트가 게이트 노드를 사용하고 있기 때문에 bsub를 사용하고 싶습니다(이전 호스트에는 게이트 노드가 없었기 때문에 "bsub" 사용 여부는 중요하지 않음). 게이트 노드에서 명령을 실행하여 "교통 체증"을 발생시킵니다. 어떤 제안이 있으십니까?

답변1

제출이 성공하면 bsub명령은 작업 제출 ID와 제출된 대기열 이름을 출력합니다.

bsub출력을 제공하지 않습니다 . 즉, 파이프를 통한 직접 입력 fastx_trimmer에 사용할 수 없습니다 .fastq_quality_trimmer

이것이 제대로 작동하려면 명령을 셸 스크립트에 넣고 제출하거나(이상적으로는 여러 번 실행할 계획인 경우) 전체 파이프라인을 대기열에 올바르게 인용하여 제출해야 합니다. 부르다 bsub.

답변2

이메일을 통해 친구들로부터 제안을 받았습니다. 두 가지 해결 방법: 1. ""에 실제 명령을 입력합니다.

bsub "fastx_trimmer -Q33 -f 1 -l 230 -i myfile.fastq | fastq_quality_trimmer -Q33 -t 18 -l 20 -o Trimmed_file.fastq”
  1. bsub용 bash 스크립트를 작성합니다.

나는 해결책 1을 시도했다. 좋은 결과. 다른 사람이 비슷한 문제를 겪을 경우를 대비하여 여기에 넣습니다.

답변3

귀하의 예에서 언급된 특정 프로그램을 테스트할 자금이 충분하지 않습니다.

그런데 요청하신 내용은-I이는 (대시 대문자) 옵션을 통해 달성할 수 있습니다 bsub. 유일한 문제는 작업 제출 메시지가 stdout으로도 전송되어 예상 메시지와 혼합된다는 것입니다.실제프로그램 출력:

Job <123456> is submitted to default queue <normal>.

이것은 LSF의 버그인 것 같습니다(stderr로 이동해야 함). 정중한 해결책이 답변예:

BSUB_QUIET=1 bsub -I cmd-that-writes-to-stdout | cmd-that-reads-from-stdin

환경 변수의 실제 값은 BSUB_QUIET분명히 중요하지 않습니다.한정된환경에서.

일회성 명령의 경우 문제 없이 한 명령의 출력을 bsub -I다른 명령으로 파이프할 수 있습니다 bsub -I.

$ export BSUB_QUIET=1

$ bsub -I grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash

$ bsub -I grep ^root /etc/passwd | bsub -I awk -F: '{print \$6}'
/root

회의$그러나 셸 메타 문자(예: 명령 어딘가에 나타나는 경우)를 인용하거나 이스케이프할 때는 주의해야 합니다. 다른 사람들이 제안했듯이 이는 단순히 독립형 스크립트를 사용하는 또 다른 좋은 이유입니다.

도움이 되길 바랍니다.

관련 정보