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 11:17] – [GNU Parallel 활용 가이드] hyjeonggnu_parallel [2021/03/17 13:09] (current) – external edit 127.0.0.1
Line 13: Line 13:
  
   $ find . -name "*.fastq" | parallel gzip   $ find . -name "*.fastq" | parallel gzip
 +  $ parallel -a fasta_files_fof gzip (압축할 파일 목록이 있는 경우)
 +  $ parallel -a gzipped_fasta_files_fof gzip -d (압축을 해제할 파일 목록이 있는 경우)
  
-사실 썩 좋은 사레는 아니다. 파일이 아닌 디렉토리는 압축해는 안되기 때문이다. 만약 fastq 파일의 목록이 파일로 주어진다면 이렇게 하면 된다.+결과 파일을 구조적으로 잘 저장한다든가, 실행 순를 지정한다든가, command line을 정교하게 짜려면 매뉴얼을 보고 좀 더 공부를 해야 한다. GNU Parallel은 SSH로 연결된 remote server를 사용하게 만들 수도 있다. 
  
-  $ parallel -fasta_files_fof gzip+아주 초급 수준을 벗어난 활용 사례를 설명해 보겠다. 수십개의 염기서열 파일에 대해서 [[http://emboss.sourceforge.net/|EMBOSS]]의 restrict(report restriction enzyme cleavage sites in nucleotide sequence)를 실행하고자 한다. 입력물로 택할 염기서열 파일명과 결과를 출력파일명은 각각 sourcelist와 destlist에 수록되었다고 가정하자. 동시에 8개의 job을 수행하려면 다음과 같이 명령하면 된다. {1}과 {2}의 순서만 잘 지킨다면 -sequence나 -outfile은 생략해도 된다. 
  
-결과 파일을 구조적으로 잘 저장다든가, 실행 순서를 지정한다든가, command line을 정교게 짜려면 매뉴얼을 보고 좀 더 공부를 야 한다. GNU Parallel은 SSH로 연결된 remote server를 사용하게 만들 수도 있다.+  $ 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 35: Line 48:
   $ parallel --number-of-cores   $ parallel --number-of-cores
   32   32
 +이런 바보! 그냥 명령행에서 nproc라고만 치면 된다!
 ==== BLAST 실행하기 ==== ==== BLAST 실행하기 ====
  
Line 42: 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.1491877043.txt.gz · Last modified: (external edit)