A Fine-Tuned Universe

[FastANI] 한 줄씩 출력되는 FastANI 결과를 matrix로 변환하기 본문

Bioinformatics/Linux

[FastANI] 한 줄씩 출력되는 FastANI 결과를 matrix로 변환하기

정재준 2023. 6. 27. 18:11
728x90

FastANI 결과를 보면 아래와 같이 나온다

 

genome1 genome2 ANI값

 

이런 식으로 나온다

 

하지만 보통은 matrix 형태로 정리된 아래 형태에 익숙할 것이다. 아니면 아래와 같은 형식으로 바꿔서 결과를 정리해야 할 때가 있다

그런데 비교하려는 유전체가 많아질 수록 결과를 정리하기가 힘들다.

그래서 주말에 아래와 같이 쉘스크립트를 써서 결과를 정리하였다

먼저 유전체 목록을 아래와 같이 파일로 만들었다. 사실 둘 다 같은 내용인데 가로 세로를 구분해서 생각하려고 따로 만들었다

ls *.gz > query_list
ls *.gz > reference_list

그리고 아래와 같이 스크립트를 짜서 실행시켰다.

 

#!/bin/bash
while read query
do
        awk -v genome=$query '$1 ~ genome {print}' fastANI_0623 > "$query.column"
        while read reference
        do
                ref=$(awk -v genome2=$reference '$2 ~ genome2 {print}' "$query.column")
                if [[ -n $ref ]]
                then
                        awk -v genome2=$reference '$2 ~ genome2 {print $3}' "$query.column" >> "$query.value"
                else
                        echo "NA" >> "$query.value"
                fi
        done < reference_list
done < query_list
paste *.value > animatrix
rm *.column *.value

query_list 파일에서 맨 처음 나오는 query 유전체 하나에 해당하는 모든 ANI값을 reference_list 파일 안에 있는 순서로 찾아서 행으로 나열하고 하나의 파일로 저장한다. query_list 파일의 다음 줄에 있는 query genome으로 넘어가서 같은 작업을 반복하고 또 다시 별도의 파일로 저장한다. 마지막엔 모든 값을 가로로 붙여 넣어서 최종적으로 animatrix.value라는 파일로 만들어준다. 행과 열의 수가 같은 표 형태의 자료이다. fastANI는 70이하 값은 계산하지 않기 때문에 그런 경우 NA로 표시된다. 가로 세로로 label을 붙이고 싶으면 paste 로 붙여주면 된다.

LIST