서열자료조작을위한실용적인스크립트예제 작성자 : 정해영 ( 오류정정이나개선사항에대한의견환영!) 최초작성일 : 2015년 8월 6일최종수정일 : 2015년 9월 22일최초공개일 : 2015년 8월 7일

Similar documents
10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

untitled

Tcl의 문법

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - u6.pptx

<4D F736F F F696E74202D20BFEEBFB5C3BCC1A6BDC7BDC D31C7D0B1E229202D20BDA92E BC8A3C8AF20B8F0B5E55D>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

PowerPoint 프레젠테이션

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

슬라이드 1

Microsoft PowerPoint 웹 연동 기술.pptx

Chapter 4. LISTS

USER GUIDE

ksh프로그램문법.ppt

BMP 파일 처리

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

PowerPoint Presentation

歯9장.PDF

Microsoft PowerPoint - chap11-포인터의활용.pptx

컴파일러

Ver 1.0 마감하루전 Category Partitioning Testing Tool Project Team T1 Date Team Information 김강욱 김진욱 김동권

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

chap7.key

PowerPoint 프레젠테이션

Microsoft PowerPoint UNIX Shell.ppt

Microsoft PowerPoint - logo_3.ppt [호환 모드]

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

MySQL-.. 1

제1장 Unix란 무엇인가?

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

Microsoft PowerPoint - chap-02.pptx

6주차.key

Visual Basic 반복문

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Columns 8 through while expression {commands} 예제 1.2 (While 반복문의이용 ) >> num=0

PowerPoint Template

중간고사

Microsoft PowerPoint UNIX Shell.pptx

Microsoft PowerPoint - chap-02.pptx

슬라이드 1

Javascript.pages

Chapter_06

/chroot/lib/ /chroot/etc/

PowerPoint 프레젠테이션

슬라이드 1

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

untitled

로거 자료실

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

슬라이드 1

Secure Programming Lecture1 : Introduction

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

C++ Programming

테이블 데이터 처리용 command line tool들

Microsoft PowerPoint - Java7.pptx

Microsoft Word - FunctionCall

02장.배열과 클래스

1 01 [ ] [ ] plus 002

HW5 Exercise 1 (60pts) M interpreter with a simple type system M. M. M.., M (simple type system). M, M. M., M.

Contributors: Myung Su Seok and SeokJae Yoo Last Update: 09/25/ Introduction 2015년 8월현재전자기학분야에서가장많이쓰이고있는 simulation software는다음과같은알고리즘을사용하고있다.

수식모드수식의표현법 수학식표현 조남운 조남운 수학식표현

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

1. AWK 프로그래밍언어 AWK는자료처리중심의프로그래밍언어이며텍스트처리와보고서생성을목적으로만들어졌다. AWK라는명칭은이언어를처음설계한 Alfred V. Aho, Peter J. Weinberger, Brian W. Kernighan 3명의이름을따서지은것이다. AWK는

PowerPoint 프레젠테이션

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2


<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

ORACLE-SQL

Microsoft PowerPoint - chap08-1 [호환 모드]

Microsoft PowerPoint - ch01.ppt


예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

PowerPoint 프레젠테이션

untitled

PowerPoint 프레젠테이션

DE1-SoC Board

PowerPoint Presentation

금오공대 컴퓨터공학전공 강의자료

Java ...

The Pocket Guide to TCP/IP Sockets: C Version

4 CD Construct Special Model VI 2 nd Order Model VI 2 Note: Hands-on 1, 2 RC 1 RLC mass-spring-damper 2 2 ζ ω n (rad/sec) 2 ( ζ < 1), 1 (ζ = 1), ( ) 1

Microsoft PowerPoint - [2009] 02.pptx

C 프로그램의 기본

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint Presentation

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

슬라이드 1

Chapter 4. LISTS

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

8장 문자열

Transcription:

서열자료조작을위한실용적인스크립트예제 작성자 : 정해영 hyjeong@kribb.re.kr jeong0449@gmail.com ( 오류정정이나개선사항에대한의견환영!) 최초작성일 : 2015년 8월 6일최종수정일 : 2015년 9월 22일최초공개일 : 2015년 8월 7일 일러두기 Ÿ 이탤릭체로쓴것은사용자가상황에맞게입력해야하는곳을나타냄 Ÿ 본자료의활용을위해서는리눅스시스템에 EMBOSS 패키지와 samtools가설치되어있어야합니다. Fasta/fastq 파일에몇개의서열이있는지세어보기 $ grep -c '>' multi_sequences.fasta $ awk 'END {print NR/4' file.fastq [awk]: 중괄호앞뒤에공백이있어도되고없어도된다. 죽, {action 이나 { action 어느형태를써도상관이없다. Fastq 파일에서앞부분의 read 4백만개 (1600만줄 ) 만뽑아서별도의파일로저장하기 $ awk 'NR == 1, NR == 16000000' in_file.fastq > out_file.fastq $ head -n 16000000 in_file.fastq > out_file.fastq [awk] 비교연산자앞뒤에공백이없어도된다. Fastq 파일을 (single line) fasta 파일로변환하기 Fasta file 은읽기쉽도록 60 글자마다줄바꿈을하는것이일반적이다. single line fasta 란 fastq 파일처럼줄 바꿈없이서열을하나의줄에표현한것과같다. single line fasta 로전환하면후속작업이편리해진다. $ awk 'NR%4 == 1 {a=substr($0,2); NR%4 == 2 {print ">" a "\n" $0' file.fastq > file_single_line.fasta [awk]: 중괄호 { 내부에명령어가하나만들어가는경우세미콜론을생략해도무방하다. 가독성을높이기위하 여중괄호의바로내부에공백을넣어도된다. [awk]: {print ">" a "\n" $0 과 {print ">"a"\n"$0 은결과가같다. print 명령어로인쇄할인자들 사이에콤마를찍으면 OFS 변수 (= 구분자, 기본값은공백 ) 를사이에넣는다. 만약탭 ( \t ) 을구분자로 설정하고싶으면 awk vofs \t pattern {action 형태로실행하라. $ sed -n '1~4{s/^@/>/;p; 2~4p' file.fastq Multi-line fasta 파일을 single line fasta 파일로변환하기 $ awk '!/^>/ { printf "%s", $0; n = "\n" /^>/ { print n $0; n = "" END { printf "%s", n ' file.fasta > file_single_line.fasta Single line fasta 파일을다시 multi-line fasta 파일로바꾸기 EMBOSS 가설치되어있다면 seqret 유틸리티를이용한다.

$ seqret -sequence single_line.fasta -outseq multi-line.fasta -sequence 와 -outseq 는생략하고입출력파일명만순서에맞게제공해도된다. Fasta 파일 (single line) 내의서열을읽어서 ID 와길이를출력하기 $ awk 'NR%2 == 1 {id=substr($0,2) NR%2 == 0 {print id, " ", length($1)' single_line.fa 길이에따라정렬하여출력하려면 sort 명령어를사용한다. 길이에따른내림차순으로정렬 ( 긴서열이앞으로나 오도록 ) 하려면 sort -k 2 -nr 명령어를실행한다. $ awk 'NR%2 == 1{id=substr($0,2) NR%2 == 0 {print id, " ", length($1)' single_line.fa sort -k 2 -n Fasta 파일 (single line) 읽어서 tab-delimited two-column file(id 와서열 ) 로출력하기 $ awk -vofs="\t" 'NR%2 == 1{id=substr($0,2) NR%2 == 0 {print id, $1' single_line.fa > out.txt ID 와서열로이루어진 two-column file 을 fasta file 로전환하기 $ awk -vofs='' '{print ">",$1,"\n",$2;' out.txt > file.fasta ID 와서열로이루어진 two-column file 에서 1 kb 이상서열만을선택하여 fasta 파일로출력하기 $ awk 'length($2) > 1000 {print ">"$1"\n"$2' file.tab > longerthan1kb.fasta Multi-fasta 파일내의서열들을분리하여각각별도의파일로저장하기 $ awk '/^>/ {OUT=substr($0,2) ".fa"; {print >> OUT; close(out)' multi_sequences.fasta 또는별첨의 fastasplit.pl Perl 스크립트를이용한다. Fasta 파일내에서특정서열만추출하기 (ID 지정 ) 추출할서열의수가많지않아서 one-line script 내에서열 ID 를삽입할수있는경우 $ perl -ne 'if(/^>(\s+)/){$c=grep{/^$1$/qw(id1 id2)print if $c' sequences.fasta 서열 ID 가별도의목록파일에들어있는경우 ( 한줄에 ID 하나 ) $ perl -ne 'if(/^>(\s+)/){$c=$i{$1$c?print:chomp;$i{$_=1 if @ARGV' ids.txt sequences.fasta 1000 bp 이상의서열만추출하여 single line fasta 파일로출력하기 Fasta/fastq 파일을 ID 와서열로구성된 tab-delimited file 로먼저전환해둔다. $ awk 'length($2) > 1000 {print ">"$1"\n"$2' file.tab > longerthan1kb.fasta Fastq 파일로부터 70-120 bp 길이범위의 read 만출력하기

Sequence quality 는고려하지않는단순한방법이므로, quality 를기준으로하는고도한 trimming 이나 filtering 등을위해서는전용도구 ( 예 : FASTX-Toolkit, SolexaQA, prinseq 등 ) 를이용하는것이바람직하다. $ awk 'BEGIN {OFS = "\n" {header = $0 ; getline seq ; getline qheader ; getline qseq ; if (length(seq) >= 70 && length(seq) <= 120) {print header, seq, qheader, qseq' infile.fastq > filtered.fastq 하나의 interleaved fastq file 을 2 개의 paired file 로분리하기 $ awk 'BEGIN{OFS="\n" $0~/\/1$/{header = $0; getline seq; getline qheader; getline qseq; print header, seq, qheader, qseq' infile.fastq > file_1.fastq $ awk 'BEGIN{OFS="\n" $0~/\/2$/{header = $0; getline seq; getline qheader; getline qseq; print header, seq, qheader, qseq' infile.fastq > file_2.fastq 서열의헤더에서 /1 /2와같은 read의 pair 표시가어떻게되어있는지반드시미리확인하여이에맞는 awk 구문내패턴을결정해야한다. @HWI-ST908R:151:D1M9MACXX:1:1101:1373:2469 2:N:0:CCGTCC => $2~/2:/ @BYI6V:00004:00005/1 => $0~/\/1$/ sed 를사용하면한층더간단하게작업할수있다. 서열의 ID 를실제로확인하여패턴을결정해야한다. $ sed -n '/1:N/ {N;N;N;p;' infile.fastq > file_1.fastq $ sed -n '/2:N/ {N;N;N;p;' infile.fastq > file_2.fastq Fasta file 에서특정영역을추출하기 먼저 EMBOSS 의 seqret 을이용하는방법을알아보자. 추출할서열의시작위치는항상끝위치보다앞에있어 야한다. 따라서 reverse strand 에암호화된유전자염기서열을추출할때에도 stop codon 에해당하는위치가 시작위치로주어져야하며, -sreverse 옵션으로상보서열전환을하면된다. $ seqret -sbegin 20 -send 200 single_sequence.fa out.fa $ seqret -sbegin 20 -send 200 single_sequence.fa genbank:out.fa $ seqret -sbegin 20 -send 200 multi_sequences.fa:seq_id out.fa $ seqret -sbegin 20 -send 200 -sreverse single_sequence.fa out.fa seqret 이출력하는서열의 ID 는입력물의것을그대로가져다쓰게된다. 출력서열의 ID 를원하는대로수정하 려면실행시간이좀더소요되지만 sed 를사용하여 > 로시작하는서열 ID 라인을수정하면된다. $ seqret -sbegin 100 -send 200 -stdout -auto multi_sequences.fa:seqid 's/^>.*$/>seqid:100-200/' > out.fa 출력물 : >seqid:100-200 $ seqret -sbegin 100 -send 200 -stdout -auto multi_sequences.fa:seqid 's/^>.\(*\)$/>newid \1/' > out.fa 출력물 : >newid seqid:100-200 < 서열 ID> <start> <end> 형식으로 extract 할서열과위치정보를수록한텍스트파일 (regions) 가존재한다면 저장되어있다면다음과같이하면된다. sed 명령어의치환부분에서변수를큰따옴표와작은따옴표가이중으 로둘러싸고있음에유의하라. $ cat regions while read id start end > do > seqret -stdout -auto -sbegin $start -send $end multi_sequences.fa:$id sed 's/^>.*$/>'"$id:$start-$end"'/' >> out.fa > done 또다른방법으로는 samtools faidx 명령을쓰는것이다. 서열추출전에 fasta 파일에대한인덱스를생성해 두어야한다. EMBOSS 의 seqret 과다른점은출력서열의 ID 는 seqid:start-end 형태로새로씌여진다는것이 다. samtools faidx 로는상보적인서열로전환이되지못하므로필요시에는 EMBOSS 패키지의 revseq 을사용

한다. 필요하다면파일로리다이렉션하기전에위의사례와같이 sed 명령어를사용하여서열의 ID 를수정해도 된다. $ samtools faidx multi_sequence.fa $ samtools faidx multi_sequence.fa seqid 10-200 > out.fa $ revseq out.fa out_rev.fa glimmer 를사용한유전자예측결과물로부터 CDS 서열추출하기 1. NCBI Glimmer site(http://www.ncbi.nlm.nih.gov/genomes/microbes/glimmer_3.cgi) 에세균유전체 서열을업로드하여 glimmer 를실행한뒤결과를텍스트파일로저장하고 fasta 파일과유사하게정리한다. 입력하는서열의 topology 를 circular 로지정하면서열의말단을통과하는유전자구조도예측을하게되므 로주의를요한다. 2. Glimmer 는각 (contig) 서열에대하여동일한 orf 번호를반복하여사용하므로입력물이 multi-fasta 인경우 혼동을유발할수있다. 따라서다음과같은 awk 명령문을이용하여각 orf 에대한유일한식별자를부여하 도록한다. 또한 glimmer 가출력하는유전자의시작부위는번역개시위치기준이다. $ awk 'BEGIN {i=0 /^>/ {id=substr($0, 2) /^orf/ {printf("%s %s ORF%05d %10s %d %d\n", id, $1, i, $2, $3, $4); i++' glimmer_3.txt > glimmer_3.out 3. 유전자위치정보를암호화된 strand 에따라서둘로나누어별도의파일에저장한다. $ awk '$6 > 0' glimmer_3.out > glimmer_3_plus.out $ awk '$6 < 0' glimmer_3.out > glimmer_3_minus.out 4. 다음을실행하여 CDS 서열을추출한다. plus 및 minus strand 각각을실행할때입출력파일을바꾸는것 말고도어떤점이다른지를유의하여실행하라 ( 파랑색으로표시 ). 아미노산으로번역하려면 EMBOSS 의 transeq 를이용한다. glimmer 가출력하는유전자구조는종결코돈까지를표시하므로번역을마치면마지막 아미노산뒤에 * 이추가되며, 서열 ID 뒤에 _1 이부가된다. 이는 vi 에서수정하면된다. $ awk '{print $1, $3, $4, $5' glimmer_3_plus.out while read seqid ORFid start end > do

> seqret -sbegin $start -send $end -stdout -auto contigs.fa:$seqid sed 's/^>.*$/'">$orfid $seqid:$start-$end +"'/' >> orf_plus.fa > done $ awk '{print $1, $3, $5, $4' glimmer_3_minus.out while read seqid ORFid start end > do > seqret -sbegin $start -send $end -sreverse -stdout -auto contigs.fa:$seqid sed 's/^>.*$/'">$orfid $seqid:$start-$end -"'/' >> orf_minus.fa > done $ cat orf_plus.fa orf_minus.fa > orf.fa $ transeq orf.fa orf_translated.faa 5. seqret 대신 samtools faidx 를이용해서도 EMBOSS 의 transeq 를이용하여같은작업을할수있을것이다. Multiple fasta 파일을서열별로분리하여별도의파일로저장하기 (fastasplit.pl)!/bin/env perl Usage : fastasplit.pl multiple_fasta_file [output_directory] use warnings; use strict; my $inputfile = shift; my $outdir = shift "."; if (! -w $outdir ) { die "You cannot make files in this directory $outdir: $!"; open INPUT, $inputfile or die "Can't open $inputfile: $!"; while ( <INPUT> ) { if ( /^>([^\s^\t]+)/ ) { my $outfile = $1; my $outfilewithpath = "$outdir/$outfile"; open OUT, ">$outfilewithpath"; print STDERR "Writing file $outfilewithpath\n"; print OUT $_; else { print OUT $_; close OUT; Contig 서열파일로부터 assembly 관련수치구하기 (n50.pl)!/usr/bin/perl Source: http://genomics-array.blogspot.com/2011/02/calculating-n50-of-contig-assembly-file.html Modified by Haeyoung Jeong Read Fasta File and compute length my $length; my $totallength; my @arr; my $num;

while(<>){ chomp; if(/^>([^\s]+)/){ print " $length\n" unless $num == 0; $num++; print "SEQ: $1 "; push (@arr, $length); $totallength += $length; $length=0; else { s/\s//g; s/\t//g; $length += length($_); push (@arr, $length); for the last contig print " $length\n"; $totallength += $length; close(fh); my @sort = sort {$b <=> $a @arr; my $n50; print "$num contigs (total length: $totallength)\n"; print "Max. contig length is ", $sort[0], "\n"; foreach my $val(@sort){ $n50+=$val; if($n50 >= $totallength/2){ print "N50 is $val (N50 contig length is $n50)\n"; last; print "Average contig length is ", $totallength / $num, "\n";

참고사이트 [Srrenu Vattipally] Bioinformatics I/O: Tips & tricks from a cluster of bioinformaticians http://bioinformatics.cvr.ac.uk/blog/category/awk/ [Frederick J. Tan] sed, AWK, and bash scripting https://emb.carnegiescience.edu/sites/default/files/140602-sedawkbash.key_.pdf Bioinformatics one-liners https://github.com/stephenturner/oneliners seqtk: Toolkit for processing sequences in FAST/Q formats https://github.com/lh3/seqtk sed and awk for genomics http://macmanes.com/sed-awk/