여러 폴더/샘플에서 명령줄 소프트웨어를 실행하고 있습니다. 각 폴더에는 *fastq.gz와 같은 파일이 있습니다.
아래는 폴더의 예입니다.
Sample_EC_only/EC_only_S1_L005_I1_001.fastq.gz Sample_EC_only/EC_only_S1_L005_R1_001.fastq.gz Sample_EC_only/EC_only_S1_L005_R2_001.fastq.gz Sample_EC_only/EC_only_S1_L006_I1_001.fastq.gz /EC_only_S1_L006_R1_001.fastq.gz
Gnu를 사용하여 여러 소프트웨어를 병렬로 실행하려고 하는데 폴더의 "ID"를 추출하는 데 문제가 있습니다.
parallel -j $NSLOTS --xapply \
" echo {1} \
/home/rob2056/software/cellranger-2.2.0/cellranger count --id = "{basename} {1}" \
--transcriptome=$ref_data \
--fastqs={1} \
" ::: $TMPDIR/FASTQ/Sample*
예를 들어 gnu 병렬 내부의 폴더에서 "Sample_EC_only"를 패턴으로 추출하고 싶습니다. --fastqs는 {1}을 사용하여 경로를 가져올 수 있지만 --id 옵션을 사용하는 데 문제가 있습니다. {1}의 경로에서 패턴을 추출하기 위해 다양한 옵션을 시도했지만 작동하지 않습니다.
--id 인수에는 출력 디렉터리를 생성할 수 있도록 {1}의 경로에서 추출된 패턴이 필요합니다.
각 {1}은 다음으로 구성됩니다(아래에는 하나의 예만 표시됨).
/tmp/FASTQ/Sample_EC_only
답변1
내가 올바르게 이해했다면, 당신이 찾고 있는 것은 매개변수의 "기본 이름" 이 {1/}
아닙니다 . {1}
바라보다인간 병렬_튜토리얼--rpl
그리고 우리는 어디서 이런 토론을 합니까?문자열 교체 구현은 다음과 같습니다.
--rpl '{/} s:.*/::'
그리고위치 대체 문자열은 다음을 사용하여 수정할 수도 있습니다./
등. {1/}
마지막 문자 앞의 모든 문자를 제거하는 것과 같습니다 /
.
--rpl
문자열 뒤에 문자열을 사용하여 자신만의 대체 단축 문자열을 만들 수 있습니다.상표( {/}
위의 예에서) 뒤에 위의 바꾸기 명령과 같은 Perl 표현식이 옵니다(s:
무늬:
대안:
).
허용되는 태그가 무엇인지 잘 모르겠지만 튜토리얼 예제를 {..}
위치 태그로 사용할 수 있습니다.{
숫자}
. /
마지막 단어 "Sample_" 앞의 모든 것을 제거하는 Perl 표현식은 다음과 같습니다. s:.*/Sample_::
따라서 --xapply
인수 앞에 추가 해야 합니다.
--rpl '{..} s:.*/Sample_::'
그런 다음 를 --id={1..}
사용하여 이 대체 항목을 인수 1에 적용합니다. 예를 들어, 첫 번째 밑줄 앞의 단어를 제거하려면 _
단어를 수정하는 대신 Sample
다음과 같은 패턴을 사용할 수 있습니다.
--rpl '{..} s:.*/[^_]*_::'
최종 명령은 다음과 같아야 합니다.
parallel -j $NSLOTS --rpl '{..} s:.*/Sample_::' --xapply \
" echo {1} \
/home/rob2056/software/cellranger-2.2.0/cellranger count --id={1/} \
--id2={1..} \
--transcriptome=$ref_data \
--fastqs={1} \
" ::: $TMPDIR/FASTQ/Sample*