파일의 특정 위치에서 시퀀스 정보 제거 및 추가

파일의 특정 위치에서 시퀀스 정보 제거 및 추가

fastq 파일에서 알려진 길이의 특정 정보를 검색하여 다른 위치에 추가해야 합니다.
예를 들어 다음 fastq 파일이 입력으로 제공됩니다.

@SRR5394526.1 1 length=150  
CGATGTTAAATCAACGATAACTACACCG    
+SRR5394526.1 1 length=150  
AA<AFJFJJJJJJJJJJAJJJJJJJJJF    

내가 출력으로 원하는 것 :

@SRR5394526.1.CGATGT 1 length=150    
TAAATCAACGATAACTACACCG    
+SRR5394526.1.CGATGT 1 length=150    
FJJJJJJJJJJAJJJJJJJJJF  

처음 6개의 뉴클레오티드가 두 번째 행의 서열과 네 번째 행의 서열 모두에서 제거되고 첫 번째와 세 번째 행의 첫 번째 숫자 1 뒤에 추가되는 것을 알 수 있습니다. 내 파일에는 이 크기의 블록(4줄)이 수백만 개 있습니다. 이는 단지 예일 뿐입니다.

sed 's/myinfo/&,/4'파일에 정보를 추가/추가하는 방법 과 파일에서 정보를 제거하는 방법을 알아냈지만 sed -e '423s!//!!; 424s!printf!//&!' 그것만으로는 충분하지 않습니다. 어떤 아이디어라도 대단히 감사하겠습니다.

답변1

사용 awk:

awk '(FNR-1) % 2 == 0 { name=$1; chr=$2; len=$3; next }
     (FNR-2) % 4 == 0 { seq=substr($0,1,6) }
                      { print name "." seq, chr, len
                        print substr($0,7) }' file.fastq >newfile.fastq

프로그램은 awk세 개의 블록으로 나누어져 있습니다.

  1. 첫 번째 블록은 첫 번째 행에서 시작하여 두 행(시퀀스 및 대량 데이터 헤더 행)마다 실행됩니다. 행에 대한 3비트 정보를 3개의 변수에 저장합니다. 그런 다음 즉시 다음 입력 줄로 점프합니다.

  2. 두 번째 블록은 시퀀스 라인의 처음 6개 문자를 추출 seq하지만, 라인 2에서 시작하는 네 번째 라인에만 해당됩니다(시퀀스 라인에만 해당).

  3. 마지막 블록은 첫 번째 블록에서 처리되지 않은 행(각 시퀀스 또는 품질 데이터 행)에서만 실행되어 출력을 구성합니다.

gzip압축 파일에 사용하려면(또는bgzip-생물정보학 프로젝트에서 자주 사용되는 압축 파일)

zcat file.fastq.gz | awk '...' | bgzip -c >newfile.gz

절단 값으로 변수를 사용하려면 다음을 고려하십시오.

awk -v n=6 '(FNR-1) % 2 == 0 { name=$1; chr=$2; len=$3; next }
            (FNR-2) % 4 == 0 { seq=substr($0,1,n) }
                             { print name "." seq, chr, len
                               print substr($0,n+1) }'

-v n=6절단 길이를 제어합니다 .

실제 awk코드(작은따옴표 안의 모든 내용)를 자체 스크립트 파일에 넣고 다음과 같이 사용할 수도 있습니다.

awk -v n=6 -f script.awk file.fastq

답변2

4 x 4줄에서 gnu sed를 사용하는 fastq 파일의 데이터,

$ sed -nE ' N;N;N;s/(.+\.1)(\s.+\n)(.{6})(\w+)\s*(\n.+\.1)(.+\n).{6}(\w+)/\1.\3\2\4\5.\3\6\7/p' fastq

@SRR5394526.1.CGATGT 1 length=150
TAAATCAACGATAACTACACCG
+SRR5394526.1.CGATGT 1 length=150
FJJJJJJJJJJAJJJJJJJJJF

관련 정보