2018년 4월 5일 목요일

paste 명령어의 색다른 사용법

실습용 자료를 읽어보다가 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 등도 한 몫을 함을 잊지 말도록 하자.

댓글 없음: