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
세 개의 블록으로 나누어져 있습니다.
첫 번째 블록은 첫 번째 행에서 시작하여 두 행(시퀀스 및 대량 데이터 헤더 행)마다 실행됩니다. 행에 대한 3비트 정보를 3개의 변수에 저장합니다. 그런 다음 즉시 다음 입력 줄로 점프합니다.
두 번째 블록은 시퀀스 라인의 처음 6개 문자를 추출
seq
하지만, 라인 2에서 시작하는 네 번째 라인에만 해당됩니다(시퀀스 라인에만 해당).마지막 블록은 첫 번째 블록에서 처리되지 않은 행(각 시퀀스 또는 품질 데이터 행)에서만 실행되어 출력을 구성합니다.
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