FASTQ 파일 서브샘플링

수준: 초급+

와일드카드를 사용한 규칙 일반화 챕터에서는 와일드카드를 활용해 다양한 파일을 처리하는 방법을 소개했습니다. 아래는 와일드카드를 이용해 FASTQ 파일을 서브샘플링하는 예시입니다:

rule all:
    input:
        "big.subset100.fastq"

rule subset:
    input:
        "big.fastq"
    output:
        "big.subset{num_lines}.fastq"
    shell: """
        head -{wildcards.num_lines} {input} > {output}
    """

참고:

라인 수가 아닌 레코드 수 기준으로 서브샘플링하기

위 방식의 잠재적 문제점은, 서브샘플링 기준이 레코드 수가 아닌 줄(라인) 수라는 점입니다. FASTQ 파일에서는 4줄이 하나의 레코드를 구성합니다. 따라서 이상적으로는 결과 파일 이름에 줄 수가 아닌 레코드 수가 포함되어야 합니다. 이를 위해서는 레코드 수에 4를 곱한 값을 사용해야 합니다!

params: 함수를 사용하면 규칙 안에 Python 함수를 정의하여 이러한 계산을 처리할 수 있습니다.