GNU 병렬로 디렉터리 패턴 추출

GNU 병렬로 디렉터리 패턴 추출

여러 폴더/샘플에서 명령줄 소프트웨어를 실행하고 있습니다. 각 폴더에는 *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* 

관련 정보