실습용 자료를 읽어보다가 fastq 파일을 fasta로 전환하는 매우 독특한 명령어를 발견하였다. 바로 paste를 쓰는 것이다. paste는 텍스트 파일을 컬럼 단위로 붙이는 명령어라고 생각하고 있었는데 실제 매뉴얼을 확인하면 "paste - merge lines of file"라는 설명이 나온다.
paste - - - - < file.fq | cut -f 1,2 | sed 's/^@/>/' | tr "\t" "\n" > file.fa
바로 이것이 file.fa를 file.fa로 바꾸는 명령어이다. paste - - - - < file.fq에서는 file.fq가 줄 단위로 분해되어 다음과 같이 표준 출력으로 내보낸다.
line1 line2 line3 line4
line5 line6 line7 line8
...
'- - - -'는 네 줄 단위씩을 끊어서 하나의 라인에 병합하여 나타냄을 의미한다. 기본 delimiter는 탭인데 바꿀 수 있다. 3, 6, 9...번째 줄만을 출력하고 싶다면 awk 'NR%3==0' file이라고 하면 되지만, 세번째 줄까지를 연이어 하나의 라인으로 출력하고 또 그 다음 세번째 줄을 연이어 출력하는 일을 반복하려면 paste - - - < file이라 해야 하는 것이다.
이렇게 전환된 상태에서 첫번째 및 두번째 컬럼은 서열의 ID와 서열에 해당한다. 이를 fasta로 전환하기 위하여 >를 삽입하고 @는 제거하면서 동시에 줄바꿈을 하는 것이 나머지 과정이다. 그러나 fastq2fasta.pl 스크립트보다는 꽤 느리다. C로 짜여진 seqtk seq 프로그램보다는 더욱 느릴 것이다.
다음 링크를 읽어보면 paste의 고급 사용법이 친절하게 설명되어 있다.
Linux paste command good examples & uses
awk와 sed가 텍스트 파일을 조작하는 매우 단순하고도 멋진 방법을 제공하는데, 여기에 paste, cut, uniq 및 comm 등도 한 몫을 함을 잊지 말도록 하자.
댓글 없음:
댓글 쓰기