User Tools

Site Tools


gnu_parallel

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
gnu_parallel [2017/04/11 08:56] – [GNU Parallel 활용 가이드] hyjeonggnu_parallel [2021/03/17 13:09] (current) – external edit 127.0.0.1
Line 10: Line 10:
   $ parallel -j 8 gzip ::: *.fastq   $ parallel -j 8 gzip ::: *.fastq
  
-물론 이것은 극단적으로 단순한 활용 사례에 불과하다. 결과 파일을 구조적으로 잘 저장한다든가, 실행 순서를 지정한다든가, command line을 정교하게 짜려면 매뉴얼을 보고 좀 더 공부를 해야 한다. GNU Parallel은 SSH로 연결된 remote server를 사용하게 만들 수도 있다.+물론 이것은 극단적으로 단순한 활용 사례에 불과하다. 약간 고급스런 응용 사례를 생각해 보자. 현 디렉토리 아래에 존재하는 모든 fastq 파일을 찾아서 압축을 하려면 다음과 같이 한다. 
 + 
 +  $ find . -name "*.fastq" | parallel gzip 
 +  $ parallel -a fasta_files_fof gzip (압축할 파일 목록이 있는 경우) 
 +  $ parallel -a gzipped_fasta_files_fof gzip -d (압축을 해제할 파일 목록이 있는 경우) 
 + 
 +결과 파일을 구조적으로 잘 저장한다든가, 실행 순서를 지정한다든가, command line을 정교하게 짜려면 매뉴얼을 보고 좀 더 공부를 해야 한다. GNU Parallel은 SSH로 연결된 remote server를 사용하게 만들 수도 있다.  
 + 
 +아주 초급 수준을 벗어난 활용 사례를 설명해 보겠다. 수십개의 염기서열 파일에 대해서 [[http://emboss.sourceforge.net/|EMBOSS]]의 restrict(report restriction enzyme cleavage sites in a nucleotide sequence)를 실행하고자 한다. 입력물로 택할 염기서열 파일명과 결과를 출력파일명은 각각 sourcelist와 destlist에 수록되었다고 가정하자. 동시에 8개의 job을 수행하려면 다음과 같이 명령하면 된다. {1}과 {2}의 순서만 잘 지킨다면 -sequence나 -outfile은 생략해도 된다.  
 + 
 +  $ parallel -a sourcelist -a destlist -j8 restrict -sitelen 4 -enzymes EcoRI,BamHI,HindIII -sequence {1} -outfile {2} 
 + 
 +**만약 어떤 파일에 완벽한 상태의 command가 여러 줄 들어있고, 이를 병렬 실행하려면 어떻게 하면 좋을까?** 다시말해서 parallel 명령어에 인수를 전달하는 것이 아니라 명령행 자체를 제공하려면? 아주 간단하다. 
 + 
 +  $ parallel -a sourcefile {} 
 +   
 +{.}, {/} 등은 sourcefile에서 넘어오는 라인에 대하여 다양한 조작을 할 수 있게 만들어 준다. SRR_Acc_List.txt에 SRA Run accession이 한 줄에 하나씩 들어있다고 가정하자. 이를 일괄적으로 다운로드하여 fastq로 전환하는 방법을 알아보자.  
 + 
 +  $ parallel -j 1 prefetch {} ::: $(cat SRR_Acc_List.txt) 
 +  $ parallel -j 1 fastq-dump --skip-technical -F --split-files -O fastq {} ::: $(cat SRR_Acc_List.txt) 
 + 
 +상세한 설명은 man parallel을 해 보라.
  
 ===== 외부 자료 ===== ===== 외부 자료 =====
Line 27: Line 48:
   $ parallel --number-of-cores   $ parallel --number-of-cores
   32   32
 +이런 바보! 그냥 명령행에서 nproc라고만 치면 된다!
 ==== BLAST 실행하기 ==== ==== BLAST 실행하기 ====
  
Line 34: Line 55:
   $ cat amino_acids.faa | parallel --block 10k --recstart '>' --pipe blastp -evalue 0.01 -outfmt 6 -db prot2003-2014.fa -query - > result.blastout   $ cat amino_acids.faa | parallel --block 10k --recstart '>' --pipe blastp -evalue 0.01 -outfmt 6 -db prot2003-2014.fa -query - > result.blastout
  
 +==== 인수 목록이 파일로 존재할 때 ====
 +수백개의 fastq file을 interleaved form으로 바꾸는 경우를 생각해 보자. fwd와 rev file, 그리고 최종 파일(interleaved)의 이름이 tsv 파일 하나에 들어있다고 가정한다.
 +
 +  $ cat list.tsv
 +  file00_1.fastq  file00_2.fastq  file00.pe.fastq
 +  file01_1.fastq  file02_1.fastq  file01.pe.fastq
 +  ...
 +
 +이번에는 콜론을 4개 연이어 붙어야 한다. 동시 작업 수는 24개로 제한하였다(-j24). list.tsv의 첫 줄이 헤더라면 --header 옵션을 주어서 건너뛰게 할 수 있다.
 +  $ parallel --colsep "\t" -j24 interleave-reads.py -o {3} {1} {2} :::: list.tsv
 +  
 +==== 출력을 파일로 저장하기 ====
 +parallel로 실행하는 명령어가 표준 출력으로 무엇인가를 내놓는다면, 이를 저장할 수 있다.
 +
 +  $ parallel --files __do_something__ ::: *
 +  
 +출력물은 /tmp 아래에 다음과 같은 형식으로 저장된다.
 +
 +  /tmp/parR1SSD.par
 +  /tmp/parjpwJL.par
 +
 +저장되는 위치를 바꾸려면 다음과 같이 환경변수를 설정한다.
 +
 +  $ TMPDIR=/var/tmp parallel --files __do_something__ ::: *
  
 ===== Remote server 활용하기 ===== ===== Remote server 활용하기 =====
gnu_parallel.1491868584.txt.gz · Last modified: (external edit)