ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • awk 다루기 - Data preprocessing
    genome data analysis/Genome analysis 2021. 3. 1. 12:46

    대량의 genome data를 다룰 때 awk, grep 등을 잘 쓰면 효율적으로 원하는 데이터를 얻거나 원하는 형식으로 만들 수 있습니다.

     

    예제 샘플은 github.com/tobiasrausch/svcatalog 여기서 받았습니다. 여기에 있는 "samples.tsv"를 썼습니다.

     

    아래 나오는 방법들은 파이썬으로 거의 똑같이 할 수 있습니다만 저처럼 파이썬 기본이 좀 부족한 상태에서 데이터를 다루다 보면 글자를 다루는 코드라 숫자라서 안 되는 경우가 있고 반대로 글자라서 안 되는 오류들이 많이 생길 거예요. 근데 awk 나 grep에서는 그런 오류가 잘 안 생깁니다. 그래서 좀 더 편한 거 같아요

     

    1. Data  형태보기

    cat samples.tsv| awk '{print $0}' | less  # or, less samples.tsv
    

    HG00096 EUR     GBR     male
    HG00268 EUR     FIN     female
    HG00419 EAS     CHS     female
    HG00759 EAS     CDX     female
    HG01051 AMR     PUR     male
    HG01112 AMR     CLM     male

     

    굳이 이렇게 안 해도 되지만 awk를 쓰는 가장 기본적인 형태인 것 같아서 이렇게 했습니다. 

     

    2. 두 번째 열 데이터를 보고 싶을 때

    cat samples.tsv| awk '{print $2}' | less # 또는
    cat samples.tsv| cut -f2 | less
    

    파일로 저장하고 싶을 때는 "| less" 대신에 "> file.txt" 이런 형식으로 해주시면 됩니다. 

     

    3. 두 번째, 세 번째, 첫 번째 열 순서로 데이터를 보고 싶을 때

    cat samples.tsv| awk '{print $2,$3,$1}' | less # 또는
    cat samples.tsv| cut -f2,3,1 | less

     

    4. 위의 경우에서 두 번째 열은 첫 번째 숫자(글자)만 필요한 경우

    cat samples.tsv| awk '{print substr($2,1,1),$3,$1}' | less
    

    E GBR HG00096
    E FIN HG00268
    E CHS HG00419
    E CDX HG00759
    A PUR HG01051
    A CLM HG01112
    E IBS HG01500

     

    5. 위의 경우에서 첫 번째 열의 세 번째 숫자(글자)부터 4개 글자(숫자)가 필요한 경우

    cat samples.tsv| awk '{print substr($2,1,1),$3,substr($1,3,4)}' | less

     

    * 위에 적힌 내용 따라 하시다가 안 되는 경우가 있을 수 있는데 보통

    1. 괄호 처리

    2. 따옴표 확인 (" " 또는 ' ') 이런 형태의 따옴표여야 합니다. (“ “ 또는 ‘ ‘) 이렇게 약간 대각선으로 되어있는 형태의 따옴표는 상황에 따라 안 될 수도 있습니다.

     

    이 두 가지를 먼저 확인해보세요

     

    6. 필터링

    6.1. 세 번째 열이 ACB 일 경우의 데이터만 선택

    cat samples.tsv| awk '$3=="ACB" {print $0}' | less 

    6.2. 첫 번째 열이 NA를 포함하고 세 번째 열이 TSI 인 데이터만 선택

    cat samples.tsv| awk '$1~/NA/ && $3=="TSI" {print $0}' | less 

    6.3. 첫 번째 열의 끝 숫자가 6이면서 4번째 열이 female 이 아닌 데이터만 선택

    cat samples.tsv| awk '$1~/_6$/ && $4!="female" {print $0}' | less 

     

    SMALL
Designed by Tistory.