프로그램 실행 시간을 비교해 보았다. Fastq 파일의 QC(단지 statistics을 추출하는 것으로부터 quality trimming/adapter clipping 등의 적극적인 조작까지)를 위한 소프트웨어는 한두 가지가 아니겠지만, 그래도 내가 가끔 쓰는 FastQC까지를 포함해서 비교해 보기로 했다. 입력물로 사용할 fastq file 두 개는 총 811 Mbp 정도의 read를 갖는다. 화면 출력은 생략한다.
$ time readstats.py KCTC3164_1.fq.gz KCTC3164_2.fq.gz real 1m41.304s user 1m40.721s sys 0m0.339s $ time statswrapper.sh format=6 in=KCTC3164_1.fq.gz,KCTC3164_2.fq.gz real 0m9.528s user 0m9.888s sys 0m0.329s $ time /usr/local/apps/FastQC/fastqc KCTC3164_1.fq.gz KCTC3164_2.fq.gz real 0m49.393s user 0m57.077s sys 0m2.492s
비교가 되지 않는 실행 속도이다. 당연히 statswrapper.sh를 쓰지 않을 이유가 없다. 그러나 출력 포맷에서 필요하지 않은 컬럼이 많으니 이를 적당히 정리하면 좋다. 여기에 awk를 이용하자. Contig가 아니라 scaffold에 대한 데이터를 출력하게 만들었다. 만약 contig에 대한 수치를 다루게 되면, N이 들어있는 read를 둘로 나눌지도 모른다는 생각이 들었기 때문이다. stats는 평균 길이에 대한 정보는 주지 않으니 awk 명령어 안에서 계산을 시키면 된다. statswrapper.sh를 실행할 때 나타나는 첫 줄(java -ea 어쩌고...)은 표준출력이 아니라 표준에러이므로 파일로 리다이렉션을 하면 파일에는 들어가지 않는다. 다음의 awk 사례에서는 file name(전체 경로를 제고), read 수, 총 bp 수, 평균 bp, 그리고 평균 GC 함량이다. format=4로 실행하면 scaffold에 대한 수치만 나오게 되고 '#'로 시작하는 헤더 라인도 나오지 않으니 아래의 사례(format=6)을 쓰는 것보다 awk 명령을 더 단순하게 작성할 수 있을 것이다.
$ statswrapper.sh format=6 in=KCTC3164_1.fq.gz,KCTC3164_2.fq.gz | awk -vOFS="\t" '!/^#/{sub("^.*/", "", $20); print $20, $1, $3, $3/$1, $18}' > readstats.txt java -ea -Xmx200m -cp /usr/local/apps/bbmap/current/ jgi.AssemblyStatsWrapper format=6 in=KCTC3164_1.fq.gz,KCTC3164_2.fq.gz [hyjeong@tube Fastq_46_final]$ cat readstats.txt KCTC3164_1.fq.gz 2687642 405833942 151 0.35005 KCTC3164_2.fq.gz 2687642 405833942 151 0.35068
타성에 젖어서 늘 하던 방식을 고집할 것이 아니라 때로는 살짝 일상에서 벗어나 보는 것도 필요하다.
내가 가고픈 그곳으로만 고집했지 - '변해가네' 가사에서
댓글 없음:
댓글 쓰기